为了账号安全,请及时绑定邮箱和手机立即绑定

php中执行insert into on duplicate key update语句识别的问题。

php中执行insert into on duplicate key update语句识别的问题。

PHP
暮色呼如 2019-03-14 06:23:19
在php项目中,通过medoo库简单连接到了mysql.由于需要批量更新配置操作,使用了insert into ... on duplicate key update语句,该语句无法却通过pdo的语法检测,php代码如下: $medoo = new Medoo($dbcfg); $sql = "INSERT INTO `t_config` (`name`,`value`) VALUES ('WEB_SITE_TITLE','11dd11'),('WEB_SITE_KEYWORD','22rr2') on duplicate key update `value` = VALUES(`value`); "; $res = $medoo->exec($sql); p($medoo->error()); p($res); 执行后报错: Array ( [0] => 42S22 [1] => 1054 [2] => Unknown column 'WEB_SITE_TITLE' in 'field list' ) PDOStatement Object ( [queryString] => INSERT INTO t_config (`name`,`value`) VALUES("WEB_SITE_TITLE","11dd11"),("WEB_SITE_KEYWORD","22rr2") on duplicate key update `value`=VALUES(`value`); ) 而拷贝该语句在命令行下运行时,该语句却正常。而后查阅相关文档,发现medoo内源代码中有一行代码: // Make MySQL using standard quoted identifier $commands[] = 'SET SQL_MODE=ANSI_QUOTES'; 当把这一行删除掉后,就可以运行了。原来是因为语句中存在双引号,在 ANSI_QUOTES 启用后就通不过语法检测。 PS: 困扰了几天的问题,本来是想要提问的,没想在边提问的过程中边解决了,也是醉了。算是踩了一个medoo的坑吧。
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

测试发现,SET SQL_MODE=ANSI_QUOTES 并不是影响sql的最终原因。而是原始sql语句中不能使用双引号来引字符串。
应该用单引号',如果单号不能使用就用带转义符的\'

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 1026 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信