4

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

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

但我总是得到一个错误:

“INSERT INTO `testB`(test) values('testvalue222 ...”中的语法错误

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

4

3 回答 3

7

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

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

默认情况下它是禁用的,并且可能应该保持未设置 - 这是 SQL 注入的一个重要途径(你应该阅读它,特别是如果你不使用绑定)。

于 2012-11-11T16:53:52.777 回答
0

默认情况下,DBD::mysql 不允许您一次执行多个语句。尽管您可以使用Mat 显示mysql_multi_statements的选项启用此功能,但您不应该这样做:除此之外,您的代码的可移植性会降低,因为某些数据库驱动程序没有任何此类选项,并且可能会导致准备好的语句出现问题。

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

于 2017-03-02T18:02:33.647 回答
-2

插入testA(测试)值('testvalue111'),('testvalue222');

于 2012-11-11T16:55:24.677 回答