我正在使用以下代码:

$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服务器版本的手册
使用near'(order_id,number_of_attempts,last_attempts)的语法
值('10297',0',位于
/_myClasses/MYSQL_Logger.php
在57号线上
我根本不清楚错误在哪里。似乎找不到:last_attempt的值,因为警告将其值设置为''Values ('10297', 0, ''。为什么会这样,这就是问题的根源吗?
另外,我是否可以在准备好的语句中使用同一占位符两次(在本例中为:last_attempt)。

最佳答案

您的execute函数缺少一个结束括号。
应该是:

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

您需要删除SET关键字。是针对UPDATE语句,而不是INSERT语句。

关于php - 我的PDO/MySQL语法有什么问题?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9889838/

10-16 16:33