繁体   English   中英

我的PDO / MySQL语法出了什么问题?

[英]What's wrong with my PDO/MySQL syntax?

我正在使用以下代码:

$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,''在第57行的/_myClasses/MYSQL_Logger.php第1行

我不清楚错误在哪里。 似乎找不到:last_attempt的值,因为警告将其值设置为''Values ('10297', 0, '' 。为什么会发生这种情况,是问题的根源?

另外,我允许在准备好的语句中使用相同的占位符两次(在这种情况下, :last_attempt )。

您在execute函数上缺少结束括号。

应该:

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

您需要删除SET关键字。 它适用于UPDATE语句,而不是INSERT语句。

您不需要SQL语句中的SET

你缺少一个括号:

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

同时从INSERT INTO语句中删除SET

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM