准备好的陈述会导致错误

时间:2014-02-25 21:08:44

标签: php mysqli prepared-statement

我对准备好的陈述很新。

这是我的代码:

<?php
$getImages=$db->prepare("SELECT * FROM header_image_arabic");
$getImages->bind_param('s', '$images');
$getImages->execute();
$getImages->bind_result($returned_images);
while($img=$returned_images->fetch_object()){
?>

这是错误:

  

致命错误:无法在第22行的C:\ wamp \ www \ arabia \ admin \ includes \ pan \ imageHeader.php中通过引用传递参数2

这个错误是什么意思?

1 个答案:

答案 0 :(得分:4)

这里有很多错误。

'$images'是一个包含7个字符的字符串。您希望将变量传递给bind_param,而不是字符串。

$getImages->bind_param('s', $images);

另外,你想要绑定到 查询中没有占位符(问号)。你可以在这里使用$db->query()。您只需在填写数据时“准备”查询。

$getImages = $db->query('SELECT * FROM header_image_arabic');
if($getImages === FALSE){
    die($db->error);
}

while($img = $getImages->fetch_object()){
}

另一件事是:$getImages->bind_result($returned_images);bind_result用于绑定查询中的字段。你不能在这里使用它,因为你正在做SELECT *。 (另外,fetch_objectbind_result 不能一起使用。您需要使用get_result(仅适用于mysqlnd驱动程序)才能使用{ {1}}。)

所以,如果你想使用“预备语句”,它看起来像这样:

fetch_object

或者像这样(需要mysqlnd驱动程序):

$getImages = $db->prepare("SELECT image_id FROM header_image_arabic WHERE name = ?");

$getImages->bind_param('s', $images);
$getImages->execute();
$getImages->bind_result($returned_images);

while($getImages->fetch()){
    // This will get updated each iteration
    echo $returned_images;
}