我正在使用以下代码:
$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
)。
答案 0 :(得分:4)
您在execute
功能上缺少结束括号。
应该是:
$query->execute(array(':order_id'=>$orderId, ':last_attempt'=>1332849904));
您需要删除SET
关键字。这是UPDATE
语句,而不是INSERT
语句。
答案 1 :(得分:0)
您不需要SQL语句中的SET
。
答案 2 :(得分:0)
您缺少一个括号:
$query->execute(array('order_id' => $orderId, 'last_attempt' => 1332849904));
同时从SET
声明中删除INSERT INTO
。