定义变量时的未定义变量通知

时间:2013-11-08 02:20:06

标签: php mysql pdo

如果我在未初始化products变量的情况下运行此查询,则代码会正确填充<ul>但我收到undefined variable: products in...错误。我在php手册中读到,当使用预处理语句时,由于调用了语句本身,它们会返回一个额外的(空)结果集。这可能是问题还是因为HTML首先呈现,看到空产品变量并触发此错误,因为当我初始化$products = ""时,一切都很好。很想知道到底发生了什么。

line 67: $sql = $db->prepare("SELECT * from item WHERE user_id = '$pid'");

$sql->execute();

$products = "";

while($row = $sql->fetch())
{
  $item_id =  $row['item_id'];
  $user_id =  $row['user_id'];
  $item_name = $row['item_name'];
  $item_description = $row['item_description'];
  $date = $row['add_date'];
  $image = $row['photopath'];

  $products .= "<li><a href='item_view.php?pid=".$item_id."'><img src='$image' 
width='50' height='50'/></a> Item ID: $item_id UserID: $user_id NAME: $item_name Added on:    $date DESCRIP: $item_description</li>";
HTML中的

<ul>
line 112: <?php echo $products; ?>
</ul>

2 个答案:

答案 0 :(得分:2)

通过执行$products .=,您实际上是:$products = $products .这是产品与自身和另一个字符串的串联。显然,当未定义产品时它会失败。

答案 1 :(得分:2)

出错的原因是您使用.=连接到$products。这要求变量已经有一个值,因此它可以添加到它。如果没有初始化,你会在第一次循环时收到有关未定义变量的通知。

它将此未定义的值视为空字符串,因此连接实际上与第一次迭代的初始化相同。未来的迭代行为正常,因为变量有一个值。但是如果启用了警告,则会在第一次迭代时收到通知,抱怨未初始化的变量。最好初始化变量,而不是依赖于这种自动强制。