2015-02-09 245 views
0

我得到了一个函数,它从我的数据库中请求一些信息,将它放入一个数组并将其返回。 sql语句是正确的。未定义的变量:行

当在数据库中找不到当前日期时,我想在我的网站上显示一个错误。 错误消息,也被添加到返回数组中。

首先我用COUNT检查数据库中是否存在相应的日期,如果count == 1,我用另一个语句从数据库中获取所有数据。如果count!= 1,我将一个数组硬编码放在一起。

当日期是在相同的给定参数的数据库中找到,该脚本用得好好的,但是当我更改日期在数据库中,我得到以下错误:

Notice: Undefined variable: row in /Applications/MAMP/htdocs/models/funcs.php on line 1257

1252年至1257年

线:

while($stmt->fetch()) 
      { 
       $row[] = array('id' => $id, 'datum' => $datum, 'mac' => $mac, 'ipad' => $ipad, 'iphone' => $iphone, 'imember' => $imember, 'applecare' => $applecare, 'verkoop_ochtend' => $verkoop_ochtend, 'verkoop_middag' => $verkoop_middag, 'verkoop_avond' => $verkoop_avond, 'vracht_ochtend' => $vracht_ochtend, 'vracht_middag' => $vracht_middag, 'vracht_avond' => $vracht_avond, 'service_ochtend' => $service_ochtend, 'service_middag' => $service_middag, 'service_avond' => $service_avond, 'werkzaamheden' => $werkzaamheden, 'error' => ''); 
      } 
      $stmt->close(); 
      $data = $row; 

有谁知道我在做什么错在这里?提前致谢!

完整的功能:

function get_current_planning($date) 
{ 
    GLOBAL $mysqli, $db_table_prefix; 
    $stmt = $mysqli->prepare("SELECT COUNT(datum) FROM " . $db_table_prefix . "planning WHERE datum = '" . $date . "'"); 
    $result = $stmt->execute(); 
print_r($result); 
var_dump($result); 

    if($result == 1) 
    { 
     $stmt->prepare("SELECT 
             * 
             FROM " . $db_table_prefix . "planning 
             WHERE datum = '" . $date . "'"); 
     $stmt->execute(); 
     $stmt->bind_result($id, $datum, $mac, $ipad, $iphone, $imember, $applecare, $verkoop_ochtend, $verkoop_middag, $verkoop_avond, $vracht_ochtend, $vracht_middag, $vracht_avond, $service_ochtend, $service_middag, $service_avond, $werkzaamheden); 
     while($stmt->fetch()) 
      { 
       $row[] = array('id' => $id, 'datum' => $datum, 'mac' => $mac, 'ipad' => $ipad, 'iphone' => $iphone, 'imember' => $imember, 'applecare' => $applecare, 'verkoop_ochtend' => $verkoop_ochtend, 'verkoop_middag' => $verkoop_middag, 'verkoop_avond' => $verkoop_avond, 'vracht_ochtend' => $vracht_ochtend, 'vracht_middag' => $vracht_middag, 'vracht_avond' => $vracht_avond, 'service_ochtend' => $service_ochtend, 'service_middag' => $service_middag, 'service_avond' => $service_avond, 'werkzaamheden' => $werkzaamheden, 'error' => ''); 
      } 
      $stmt->close(); 
      $data = $row; 
    } 
    else 
    { 
     $row[] = array('id' => '', 'datum' => '', 'mac' => '', 'ipad' => '', 'iphone' => '', 'imember' => '', 'applecare' => '', 'verkoop_ochtend' => '', 'verkoop_middag' => '', 'verkoop_avond' => '', 'vracht_ochtend' => '', 'vracht_middag' => '', 'vracht_avond' => '', 'service_ochtend' => '', 'service_middag' => '', 'service_avond' => '', 'werkzaamheden' => '', 'error' => 'Er is geen planning gevonden voor de huidige datum!'); 
     $stmt->close(); 
     $data = $row; 
    } 
    return $data; 
} 

print_r($result) returns 1

var_dump($result) returns bool(true)

+0

如果没有行呢?既然你没有在你的循环之前定义'$ rows',它永远不会存在(并且是一个* undefined *变量!) – h2ooooooo 2015-02-09 18:27:18

回答

1

您不是您的SELECT COUNT()...查询的结果。它在我看来像你的第二个查询中的while(...fetch())循环有时会运行零次。这将导致代码开始$row[] =无法运行,这反过来会导致$rowwhile(...fetch())循环之后未定义。

无论如何,用两个连续的查询来计算行数然后获取它们有点浪费。您可能希望完全跳过SELECT COUNT查询。相反,做这样的事情:

$row = Array(); 
while($stmt->fetch()) { 
    $row[] = array('id' => $id, 'datum' => $datum, 'mac' => $mac, 'ipad' => $ipad, 'iphone' => $iphone, 'imember' => $imember, 'applecare' => $applecare, 'verkoop_ochtend' => $verkoop_ochtend, 'verkoop_middag' => $verkoop_middag, 'verkoop_avond' => $verkoop_avond, 'vracht_ochtend' => $vracht_ochtend, 'vracht_middag' => $vracht_middag, 'vracht_avond' => $vracht_avond, 'service_ochtend' => $service_ochtend, 'service_middag' => $service_middag, 'service_avond' => $service_avond, 'werkzaamheden' => $werkzaamheden, 'error' => ''); 
} 
$stmt->close(); 
if (0 == count($row)) { 
    /* deal with the no matching rows case */ 
} 
$data = $row; 
-1

看起来你还没有定义的变量$row。在开始将$row作为数组对待之前,您需要一个$row=Array();

+0

这并不完全正确。你可以编写'$ row [] ='X''来给数组添加一个值,如果数组还没有被定义,数组将被定义。但是,如果查询不返回任何行,那么'while'循环没有迭代,'$ row'不会被定义。在这种情况下'$ data = $ row;'将会失败。你的解决方案将解决这个问题,为了清晰和像这样的意外行为,初始化像这样的变量通常是一个好主意。 – GolezTrol 2015-02-09 18:13:08

+0

@GolezTrol是的,它将被定义,但PHP会“注意到”你这件事。总是建议声明所有变量。推荐阅读:http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-index – nikoskip 2015-02-09 18:18:10

+0

@nikoskip我不认为这是速记数组符号的情况。这是通过'$ data = $ row;'(= 1257行)行的通知来支持的。另请参阅[关于数组的PHP文档](http://php.net/manual/en/language.types.array.php)上的“使用方括号语法创建/修改”一章。 (“创建”有点放弃它)。不过,我完全同意你初始化变量。 – GolezTrol 2015-02-09 18:40:48