#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);