在php项目中,通过medoo库简单连接到了mysql.由于需要批量更新配置操作,使用了insertinto...onduplicatekeyupdate语句,该语句无法却通过pdo的语法检测,php代码如下:$medoo=newMedoo($dbcfg);$sql="INSERTINTO`t_config`(`name`,`value`)VALUES('WEB_SITE_TITLE','11dd11'),('WEB_SITE_KEYWORD','22rr2')onduplicatekeyupdate`value`=VALUES(`value`);";$res=$medoo->exec($sql);p($medoo->error());p($res);执行后报错:Array([0]=>42S22[1]=>1054[2]=>Unknowncolumn'WEB_SITE_TITLE'in'fieldlist')PDOStatementObject([queryString]=>INSERTINTOt_config(`name`,`value`)VALUES("WEB_SITE_TITLE","11dd11"),("WEB_SITE_KEYWORD","22rr2")onduplicatekeyupdate`value`=VALUES(`value`);)而拷贝该语句在命令行下运行时,该语句却正常。而后查阅相关文档,发现medoo内源代码中有一行代码://MakeMySQLusingstandardquotedidentifier$commands[]='SETSQL_MODE=ANSI_QUOTES';当把这一行删除掉后,就可以运行了。原来是因为语句中存在双引号,在ANSI_QUOTES启用后就通不过语法检测。PS:困扰了几天的问题,本来是想要提问的,没想在边提问的过程中边解决了,也是醉了。算是踩了一个medoo的坑吧。
2 回答
扬帆大鱼
TA贡献1799条经验 获得超9个赞
测试发现,SETSQL_MODE=ANSI_QUOTES并不是影响sql的最终原因。而是原始sql语句中不能使用双引号来引字符串。应该用单引号',如果单号不能使用就用带转义符的\'。
添加回答
举报
0/150
提交
取消