Что не так с моим синтаксисом PDO / MySQL? - PullRequest
1 голос
/ 27 марта 2012

Я использую следующий код:

$query = $dbh->prepare("INSERT into crm_order_errors "
                      ."SET (order_id, number_of_attempts, last_attempt) "
                      ."VALUES (:order_id, 0, :last_attempt) "
                      ."ON DUPLICATE KEY UPDATE number_of_attempts = number_of_attempts + 1, last_attempt = :last_attempt"
         );

$query->execute(array(':order_id'=>$orderId, ':last_attempt'=>1332849904);

Это приводит к следующей ошибке:

Предупреждение PHP: PDOStatement :: execute (): SQLSTATE [42000]:Синтаксическая ошибка или нарушение доступа: 1064 У вас есть ошибка в вашем синтаксисе SQL;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '(order_id, number_of_attempts, last_attempt) VALUES (' 10297 ', 0,' 'в строке 1 в /_myClasses/MYSQL_Logger.php в строке 57

Мне просто непонятно, где ошибка. Похоже, что значение :last_attempt не найдено, так как предупреждение устанавливает его значение на '': Values ('10297', 0, ''. Почемупроисходит ли это и является ли это источником проблемы?

Кроме того, мне разрешено использовать один и тот же заполнитель дважды в подготовленном утверждении (в данном случае :last_attempt).

Ответы [ 3 ]

4 голосов
/ 27 марта 2012

У вас отсутствует конечная скобка в функции execute.

Должно быть:

$query->execute(array(':order_id'=>$orderId, ':last_attempt'=>1332849904));

И вам необходимо удалить ключевое слово SET.Это для UPDATE утверждений, а не INSERT утверждений.

0 голосов
/ 27 марта 2012

Вам не хватает скобки:

$query->execute(array('order_id' => $orderId, 'last_attempt' => 1332849904));

Также удалите SET из вашего INSERT INTO заявления.

0 голосов
/ 27 марта 2012

Вам не нужно SET в операторе SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...