所以,我有以下PDO语句,它是页面上几个类似构造的语句之一。其余的工作正常,所以我很困惑为什么这个说明无效的语法。
$test_id = '1';
$option = 'a';
$ab_email = 'test@testing.com';
$stmt = $pdo_db->prepare("INSERT INTO `ab_tests_visitors` (test_id,option,visits,email) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE email=?");
$stmt->execute(array($test_id,$option,1,$ab_email,$ab_email));
数据库的模式有5列,其中2列是索引。
给出的错误是:
致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在“选项,访问,电子邮件”附近使用正确的语法VALUES(?,?,?,?)ON DUPLICATE KEY UPDATE email =?'在第1行
答案 0 :(得分:1)
option
是MySQL keyword。如果你想将它用作标识符,请确保始终用反引号括起来(正如你应该使用标识符一样):
$stmt = $pdo_db->prepare("INSERT INTO `ab_tests_visitors` (`test_id`,`option`,`visits`,`email`) VALUES (?,?,?,?) ON DUPLICATE KEY UPDATE `email`=?");
答案 1 :(得分:1)
对于此问题,在列的名称中,您必须在列名称周围使用反引号`
(alt + 96)