如果我在未初始化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>
答案 0 :(得分:2)
通过执行$products .=
,您实际上是:$products = $products .
这是产品与自身和另一个字符串的串联。显然,当未定义产品时它会失败。
答案 1 :(得分:2)
出错的原因是您使用.=
连接到$products
。这要求变量已经有一个值,因此它可以添加到它。如果没有初始化,你会在第一次循环时收到有关未定义变量的通知。
它将此未定义的值视为空字符串,因此连接实际上与第一次迭代的初始化相同。未来的迭代行为正常,因为变量有一个值。但是如果启用了警告,则会在第一次迭代时收到通知,抱怨未初始化的变量。最好初始化变量,而不是依赖于这种自动强制。