我想使用DBI将值插入两个单独的MySQL表中。我试图通过在它们之间插入INSERT
将两个有效的;
个查询合并为一个:
$dbh->do(q{
INSERT INTO `testA`(test) values('testvalue111');
INSERT INTO `testB`(test) values('testvalue222');
});
但我总是收到错误:
“INSERT INTO`testB`(测试)值中的语法错误('testvalue222 ...”
如果我将查询分成两个单独的do
个调用,则可以正常运行。但组合查询在phpMyAdmin中工作正常。为什么它在Perl中失败?
答案 0 :(得分:7)
您需要在connect
调用中设置一个选项以启用此选项。来自the docs:
mysql_multi_statements
从MySQL 4.1开始,可以使用此选项启用对以分号(;)分隔的多个语句的支持。如果还启用了服务器端预处理语句,则启用此选项可能会导致问题。
默认情况下禁用它,并且可能应该保持未设置状态 - 这是SQL注入的一个很大的途径(特别是如果你没有使用绑定,你应该阅读它)。
答案 1 :(得分:0)
默认情况下,DBD :: mysql不允许您一次执行多个语句。虽然可以使用mysql_multi_statements
选项Mat showed启用此功能,但您不应该这样做:除其他外,您的代码将不太可移植,因为某些数据库驱动程序不会有任何这样的选择,它可能会导致准备好的陈述出现问题。
相反,只需为每个语句发出单独的DBI命令。
答案 2 :(得分:-2)
INSERT INTO testA
(测试)值('testvalue111'),('testvalue222');