我需要做批量 MYSQL插入/更新。我有批量插入语句工作,但当插入多个单行时它不会..同样我无法生成批量更新。请参阅下面的示例。
批量插入语句有效
$sql = "INSERT INTO `test` (`somefield`) VALUES ('test', 'test');";
db::statement($sql);
多个单独的插入语句 NOT 正在工作
$sql = "INSERT INTO `test` (`somefield`) VALUES ('test'); INSERT INTO `test` (`somefield`) VALUES ('test');";
db::statement($sql);
SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;查看与MySQL服务器版本对应的手册,以便在第1行的“INSERT INTO
test
(somefield
)VALUES('test')'附近使用正确的语法(SQL:INSERT INTO {{1 } {(1 {}})VALUES('test'); INSERT INTOtest
(somefield
)VALUES('test');)
批量更新声明无法正常工作
test
1064 - 您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在''航班'附近使用正确的语法(
somefield
,$sql = "INSERT INTO 'flights' (`id`, `airline`) VALUES ('142832', 'BA') ON DUPLICATE KEY UPDATE `airline`=VALUES(`airline`);" db::statement($sql);
)VALUES('142832','BA')on DUPLICATE KEY UP'at第1行
已审核多个Stackoverflow帖子 - 但我收到了错误
多个插入语句 - Multiple SQL Update Statements in single query
批量更新声明 - Multiple Updates in MySQL
非常感谢这方面的帮助 - 谢谢!
答案 0 :(得分:3)
这很奇怪。快速浏览一下,看起来批处理语句是错误的,这应该是有效的。
语义正确的批处理语句将括号分隔每行数据,即。像这样:
INSERT INTO test
VALUES
('test1')
, ('test2')
, ('test3');
单独的insert语句看起来很好,但是,您的数据库驱动程序可能不支持其statement
方法中的多个语句(大多数不支持,AFAIK)。解决方法是从客户端启动事务,遍历语句数组并执行。然后,当所有语句都执行时,如果没有错误则提交,或者回滚事务。第一种选择虽然更快。
更新语句不起作用,因为使用单引号引用了表名flights
。如果要引用模式/表/列标识符,请使用反向标记,并为字符串值和&保留单引号。日期,正如您在同一查询中的其他位置所做的那样。如果它是一个保留字,只需要转义数据库元素名称,但命名数据库元素如“into”,“user”等是不好的做法,应该避免使用。
INSERT INTO flights (`id`, `airline`)
VALUES
('142832', 'BA')
ON DUPLICATE KEY UPDATE
airline=VALUES(`airline`)
答案 1 :(得分:1)
尝试取消引用航班,或在上次查询(批量更新声明)中使用后退标记引用它。