Привет всем, кто недавно пытался попробовать себя в PDO, и в настоящее время я пытаюсь написать базовый класс базы данных для проекта, над которым я работаю. Однако у меня возникли проблемы с попыткой написать функцию для выполнения запроса на обновление с использованием подготовленных операторов.
function update($tabledata, $table, $where){ $fields = array_keys($tabledata); $data = array_values($tabledata); $fieldcount = count($fields); $wherefield = implode(array_keys($where)); $whereval = implode(array_values($where)); $this->query = "UPDATE $table SET "; $this->query .= '(' . implode($fields, ' = ?, ') . ' = ?)'; $this->query .= " WHERE $wherefield = '$whereval'"; $this->query = $this->_clean($this->query); $stmt = $this->conn->prepare($this->query) or die('Problem preparing query'); $stmt->execute($data)or die('Problem executing query'); }
Примером его использования может быть:
$usertbl = 'users'; $date = date("Ymd"); $updatedata = array( 'Username' => 'test', 'Password' => 'unknown', 'Email' => 'email', ); $where = array( 'Username' => 'user' ); $Database->update($updatedata,$usertbl,$where);
Это возвращает следующую ошибку:
Предупреждение: PDOStatement :: execute () [pdostatement.execute]: SQLSTATE [42000]: Синтаксическая ошибка или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с ним (Username = 'test', Password = 'unknown', Email = 'email') WHERE Username = 'use' в строке 1
Любая помощь приветствуется.
В предложении SET
запроса UPDATE
нет скобок.
http://dev.mysql.com/doc/refman/5.0/en/update.html
Следовательно, синтаксическая ошибка при ударе (если вы пытаетесь сделать что-то правильно со связанными параметрами, сделайте это и в WHERE
!
ваша часть WHERE не использует подготовленные заявления
использование die () НЕ является способ пойти; не используйте OR, но вместо этого проверяйте исключение.
Мне любопытно, что делает метод _clean ()?
Кажется, ваш PDO в совместимом режиме. Было бы лучше отключить его
Я хотел бы видеть окончательный запрос, он обычно помогает много
вот мой вопрос по той же теме, надеюсь, вы могли бы найти это полезным:
Вставка / обновление вспомогательной функции с использованием PDO
однако я отложил PDO и вернулся к старой mysql, которая мне подходит лучше.