无效的PDO MySQL语句 - 语法错误

时间:2014-02-21 16:03:22

标签: php mysql

所以,我有以下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列是索引。

  • visitor_id是int(10)和auto_increment,也是主
  • test_id是int(10)
  • 选项是varchar(100)
  • 访问次数为int(10),默认值为1
  • 电子邮件是varchar(255)和唯一

给出的错误是:

致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;查看与您的MySQL服务器版本对应的手册,以便在“选项,访问,电子邮件”附近使用正确的语法VALUES(?,?,?,?)ON DUPLICATE KEY UPDATE email =?'在第1行

2 个答案:

答案 0 :(得分:1)

optionMySQL 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)