PHP PDO Обновление подготовленной задачи

Привет всем, кто недавно пытался попробовать себя в 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, которая мне подходит лучше.