为什么';用分号连接多个MySQL查询是否可以与Perl DBI一起工作?
我想使用将值插入到两个单独的MySQL表中。我试图通过插入一个为什么';用分号连接多个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…”中的语法错误 如果我将查询分为两个单独的
,将两个工作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插入到两个不同的表中。