为什么不用分号连接多个MySQL查询与Perl DBI一起使用?

Ski*_*kip 3 mysql perl dbi

我想使用DBI将值插入两个单独的MySQL表中.我试图INSERT通过;在它们之间插入一个将两个工作查询合并为一个:

$dbh->do(q{
    INSERT INTO `testA`(test) values('testvalue111');
    INSERT INTO `testB`(test) values('testvalue222');
});
Run Code Online (Sandbox Code Playgroud)

但我总是得到一个错误:

"INSERT INTO`testB`(测试)值('testvalue222 ......)中的语法错误

如果我将查询分成两个单独的do调用,它就可以工作.但组合查询在phpMyAdmin中工作正常.为什么它在Perl中失败?

Mat*_*Mat 7

您需要在connect调用中设置一个选项以启用此选项.来自文档:

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

它默认是禁用的,并且可能应该保持未设置状态 - 这是SQL注入的一个很大的途径(特别是如果你没有使用绑定,你应该阅读它).