我需要做批处理 MYSQL插入/更新。我得到了批处理插入语句,但是当插入以多个行的形式出现时,它不会..类似地,我无法生成批处理更新。请参阅下面的例子。
批处理插入语句工作
$sql = "INSERT INTO `test` (`somefield`) VALUES ('test', 'test');";
db::statement($sql);多单独插入语句 NOT working
$sql = "INSERT INTO `test` (`somefield`) VALUES ('test'); INSERT INTO `test` (`somefield`) VALUES ('test');";
db::statement($sql);SQLSTATE42000:语法错误或访问冲突: 1064您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以获得在第1行(SQL:插入
test(somefield)值('test');插入test(somefield)值('test');)附近使用“插入到test(somefield)值”(‘test’)的正确语法;
批处理更新语句不工作的
$sql = "INSERT INTO 'flights' (`id`, `airline`) VALUES ('142832', 'BA') ON DUPLICATE KEY UPDATE `airline`=VALUES(`airline`);"
db::statement($sql);1064 -您的SQL语法有一个错误;请检查与您的MySQL服务器版本对应的手册,以便在第1行的重复键UP上使用接近“
id,airline”值('142832','BA')的正确语法。
查看了多个堆栈溢出帖子--但我搞错了
多个插入语句- Multiple SQL Update Statements in single query
批处理更新语句- Multiple Updates in MySQL
非常感谢你的帮助-谢谢!
发布于 2016-10-29 19:48:40
这太奇怪了。乍一看,这条批处理语句似乎是错误的,这应该是可行的。
语义正确的批处理语句的括号将分隔每一行数据,即。就像这样:
INSERT INTO test
VALUES
('test1')
, ('test2')
, ('test3');单独的insert语句看起来很好,但是,您的数据库驱动程序可能不支持它的statement方法中的多个语句(大多数不支持AFAIK)。所做的工作是从客户端启动事务,循环遍历语句数组并执行。然后,当所有语句执行时,如果没有错误,提交,或者回滚事务。不过,第一种选择更快。
update语句不能工作,因为表名flights是使用单引号引用的。如果要引用模式/表/列标识符,请使用回标,并为字符串值和日期保留单引号,就像在同一查询的其他地方所做的那样。只有当数据库元素名是保留词时,才有必要转义它,但是将数据库元素命名为“into”、“user”等是错误的做法,应该避免。
INSERT INTO flights (`id`, `airline`)
VALUES
('142832', 'BA')
ON DUPLICATE KEY UPDATE
airline=VALUES(`airline`)发布于 2016-10-29 19:32:23
尝试取消对航班的引用,或者在上一次查询(批处理更新语句)中使用倒计时引用。
https://stackoverflow.com/questions/40322726
复制相似问题