目前,我在MYSQL上运行多个语句,如下所示;
my $sth1 = $dbh->prepare("ALTER TABLE whatever....");
my $sth2 = $dbh->prepare("UPDATE whatever....");
my $sth3 = $dbh->prepare("ALTER TABLE whatever....");
my $sth4 = $dbh->prepare("DROP TABLE whatever....");
my $sth5 = $dbh->prepare("DROP TABLE whatever....");
$sth1->execute;
$sth1->finish;
$sth2->execute;
$sth2->finish;
$sth3->execute;
$sth3->finish;
$sth4->execute;
$sth4->finish;
$sth5->execute;
$sth5->finish;
此代码工作正常。
但是,我有超过50个此类查询。所以你可以想象上面这些线的大小。我上面粘贴的只是5个查询。
问题:
使用 Perl DBI
运行多个MySQL查询/语句是否有更优雅的方式?
答案 0 :(得分:9)
至少,你应该迭代你的sql字符串。将or die
添加到execute
方法中也是一个好主意:
my @sql = (
q{ALTER TABLE whatever....},
q{UPDATE whatever....},
q{ALTER TABLE whatever....},
q{DROP TABLE whatever....},
q{DROP TABLE whatever....},
);
for (@sql) {
my $sth = $dbh->prepare($_);
$sth->execute or die $dbh->errstr;
}
答案 1 :(得分:6)
DBD :: mysql有一个参数mysql_multi_statements:
从MySQL 4.1开始,可以使用此选项启用对以分号(;)分隔的多个语句的支持。如果还启用了服务器端预处理语句,则启用此选项可能会导致问题。