Подготовленные заявления приводят к ошибке

Я очень новичок в подготовленных заявлениях.

Это мой код:

<?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;
}
Другие вопросы по тегам