Я использую следующий код:
$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
).