因此,我有以下PDO语句,它是页面上几个类似构造的语句之一。其余的工作正常,所以我很困惑,为什么这个说明无效的语法。无效的PDO MySQL语句 - 语法错误
$test_id = '1';
$option = 'a';
$ab_email = '[email protected]';
$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'
尝试在反引号(')中包含字段 – T0xicCode
旁注:4个VALUES,但数组为5个。可能是一个因素,但不会修复你的代码。编辑:'选项'是一个保留字。见下面的答案。 –
最后一个变量用于SQL“ON DUPLICATE KEY UPDATE”,因此它不是额外的。 –