Подготовленные заявления приводят к ошибке
Я очень новичок в подготовленных заявлениях.
Это мой код:
<?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()){
?>
Это ошибка:
Неустранимая ошибка: невозможно передать параметр 2 по ссылке в C:\wamp\www\arabia\admin\includes\pan\imageHeader.php в строке 22`
Что означает эта ошибка?
1 ответ
Есть много вещей не так здесь.
'$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_object
а также bind_result
нельзя использовать вместе. Вам нужно использовать get_result
(который работает только с драйвером mysqlnd), чтобы иметь возможность использовать fetch_object
.)
Итак, если вы хотите использовать "подготовленные операторы", это будет выглядеть примерно так:
$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;
}
Или вот так (требуется драйвер mysqlnd):
$getImages = $db->prepare("SELECT * FROM header_image_arabic WHERE name = ?");
$getImages->bind_param('s', $images);
$getImages->execute();
$result = $getImages->get_result();
while($img = $result->fetch_object()){
echo $img->image_id;
}