Запрос на обновление в цикле for

#php #mysql #sql

#php #mysql #sql

Вопрос:

почему это не работает..

я хочу обновить свою таблицу в базе данных, это мой код.

 for ($i=0; $i <83 ; $i  ) { 

    $link="this is test".$i;
    $sql = "UPDATE tbl_gallery_images SET   thumbnail_url='$link' WHERE gallery_id=1";

    // Prepare statement
    $stmt = $conn->prepare($sql);
    // execute the query
    $stmt->execute();

    echo $link."<br>";
}
  

когда я повторяю эту ссылку, она отображается на 100% правильно, но в БД просто обновите 82 числа во всех строках, даже если они находятся в цикле.
заранее спасибо.

Комментарии:

1. Вы имели в виду обновление той же галереи — WHERE gallery_id=1 ?

2. удалите "this is test" из вашей строки сохранения $link

3. Он обновляется до 0, а затем до 1, а затем до 2, а затем… до 82 — это последний. Чего вы ожидаете?

4. В этом случае вы не можете использовать gallery_id в условии where. Вам нужно использовать какой-нибудь другой столбец, который однозначно идентифицирует каждую строку.

5. затем используйте ‘и’ в вашем предложении where. Таким образом, ваш запрос будет содержать UPDATE tbl_gallery_images SET thumbnail_url=’$link’, ГДЕ gallery_id=1 И other_column = значение

Ответ №1:

UPDATE tbl_gallery_images SET thumbnail_url = '$link' WHERE gallery_id = 1

Как бы то ни было, этот запрос обновляет столбец thumbnail_url во всех записях, которые имеют gallery_id = 1 . Выполнение одного и того же запроса 84 раза в цикле приводит к тому, что один и тот же набор записей обновляется снова и снова на каждой итерации с увеличением thumbnail_url . После последней итерации все записи, где gallery_id = 1 заканчиваются на thumbnail_url = 'this is test83 .

Разумным решением было бы добавить еще один критерий в WHERE предложение, чтобы обновлять только одну запись за итерацию. Предполагая, что у вас есть некоторый столбец integer, вызываемый id для устранения неоднозначности записей, куда gallery_id = 1 вы обычно обращаетесь:

 `UPDATE tbl_gallery_images SET thumbnail_url = '$link' WHERE gallery_id = 1 AND id = $i`