0

如果我在未初始化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>
4

2 回答 2

2

通过这样做$products .=,您实际上是在做:$products = $products .这是将产品连接到自身和另一个字符串。显然,当未定义产品时它会失败。

于 2013-11-08T02:23:49.777 回答
2

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

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

于 2013-11-08T02:23:59.977 回答