为什么';用分号连接多个MySQL查询是否可以与Perl DBI一起工作?

为什么';用分号连接多个MySQL查询是否可以与Perl DBI一起工作?,mysql,perl,dbi,Mysql,Perl,Dbi,我想使用将值插入到两个单独的MySQL表中。我试图通过插入一个,将两个工作INSERT查询组合成一个查询在它们之间: $dbh->do(q{ INSERT INTO `testA`(test) values('testvalue111'); INSERT INTO `testB`(test) values('testvalue222'); }); 但我总是会出错: “插入到`testB`(test)值('testvalue222…”中的语法错误 如果我将查询分为两个单独的

我想使用将值插入到两个单独的MySQL表中。我试图通过插入一个
,将两个工作
INSERT
查询组合成一个查询在它们之间:

$dbh->do(q{
    INSERT INTO `testA`(test) values('testvalue111');
    INSERT INTO `testB`(test) values('testvalue222');
});
但我总是会出错:

“插入到`testB`(test)值('testvalue222…”中的语法错误


如果我将查询分为两个单独的
do
调用,它会工作。但是组合查询在phpMyAdmin中工作良好。为什么在Perl中会失败?

您需要在
connect
调用中设置一个选项以启用此功能。从:

mysql\u多语句

从MySQL 4.1开始,可以使用此选项启用对以分号(;)分隔的多个语句的支持。如果同时启用服务器端准备的语句,则启用此选项可能会导致问题


默认情况下,它是禁用的,并且可能会保持未设置状态-这是SQL注入的一个大途径(尤其是在不使用绑定的情况下,您应该阅读相关内容)。

插入
testA
(test)值('testvalue111'),('testvalue222'))默认情况下,DBD::mysql不允许您一次执行多个语句。尽管您可以使用
mysql\u multi\u statements
选项作为启用此功能,但您不应该这样做:除此之外,您的代码的可移植性较差,因为某些数据库驱动程序没有任何此类选项,并且可能会导致准备好的sta出现问题陈述


相反,只需为每个语句发出单独的DBI命令。

但是,最好使用单独的调用来简化可读性。组合调用可以提高性能,谢谢!Skip插入到两个不同的表中。