Не удается выполнить запрос PDO

#php #mysql #sql #pdo

#php #mysql #sql #pdo

Вопрос:

Я пытаюсь указать путь к изображениям, которые я ранее размещал на ftp, у меня есть 10 разных столбцов

  photo1, photo2, photo3
  

Это мой код

 for($i = 1; $i < $number_of_files   1 ; $i  ){

  $column = 'photo' . $i;
  $file = 'gallery/zdjecie-' . $id . '-' . $i;
    $sql = "UPDATE gallery SET :column=:zdjecie WHERE id=:id";
    $go = $db->prepare($sql);
    $go->bindParam(':column', $column);
    $go->bindParam(':zdjecie', $file);
    $go->bindParam(':id', $id);
    $go->execute();
    $go->closeCursor();
    $go = null;
}
  

Он отображает эту ошибку

Неустранимая ошибка: неперехваченное исключение ‘PDOException’ с сообщением ‘SQLSTATE[42000]: синтаксическая ошибка или нарушение доступа: 1064 Что-то не так в вашем синтаксисе obok «photo1’=’gallery/zdjecie-4-1′ ГДЕ id=’4» w linii 1’ в

Итак, я хотел сделать что-то вроде этого

в столбцах photo1 должно быть /gallery/zdjecie-X-1 … где X — идентификатор

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

1. SET :column=:zdjecie вы не можете привязать значение к имени столбца. вместо перебора ваших столбцов, вы должны сделать один оператор обновления для всей строки. это чище, быстрее и обычная практика.

Ответ №1:

Эта строка неверна

  $sql = "UPDATE gallery SET :column=:zdjecie WHERE id=:id";
  

Не используйте : перед именами столбцов, и вы не можете сделать имя столбца заменяемым параметром

 $sql = "UPDATE gallery SET column=:zdjecie WHERE id=:id";
  

Вам нужно будет сделать это, чтобы заменить имя столбца

 $sql = "UPDATE gallery SET $column = :zdjecie WHERE id=:id";
  

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

Вы должны использовать отдельную таблицу для хранения этих данных с помощью внешнего ключа ключа этой таблицы-владельца

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

1. итак, как я могу сделать это каждый раз, когда он загружает что-то, имя столбца меняется с photo1 на photo2, затем на photo3 и т.д.?

2. Я не знаю, как это сделать, но он все еще не работает

3. неважно, мне пришлось удалить параметр bindParam для столбца, спасибо!

4. Вы удалили эту строку $go->bindParam(':column', $column);