PHP PDO Update подготовил задачу - PullRequest
2 голосов
/ 05 февраля 2011

Привет всем, я недавно пробовал свои силы в 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("Y-m-d");
 $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 версия сервера для правильного синтаксиса использовать рядом с "(имя пользователя =" тест ", пароль = 'unknown', Email = 'email') ГДЕ имя пользователя = 'use' в строке 1

Любая помощь будет высоко ценится.

Ответы [ 2 ]

3 голосов
/ 05 февраля 2011

В предложении SET запроса UPDATE нет скобок.

http://dev.mysql.com/doc/refman/5.0/en/update.html

Отсюда и синтаксическая ошибка при нажатии (.Если вы пытаетесь сделать все правильно с привязанными параметрами, делайте это и в предложении WHERE!

1 голос
/ 05 февраля 2011
  • ваша часть WHERE не использует подготовленные операторы

  • использование die () НЕ путь; не используйте ИЛИ, но вместо этого проверьте выброшенное исключение.

  • Мне интересно, что делает метод _clean ()?

  • Кажется, ваш PDO в совместимом режиме. Было бы лучше выключить его

  • Я бы хотел увидеть окончательный запрос, обычно он очень помогает

  • вот мой вопрос на ту же тему, надеюсь, вы найдете его полезным:
    Вставить / обновить вспомогательную функцию с помощью PDO

  • однако я отложил PDO и вернулся к старому mysql, который мне больше подходит.

...