mysql - 在perl中运行多个sql脚本

标签 mysql perl dbi

我有 5 个 .sql 脚本,用于创建表并插入到表中。 。我想将它们作为 PERL 中的事务一起运行。 我在 Google 和 SO 中搜索过它,但只有我能找到有关使用批处理脚本运行脚本的信息。 我不知道如何使用 PERL DBI 作为事务来一起运行脚本。 任何人都可以帮忙吗? 我是 perl 和 mysql 的新手,我不知道该怎么做。

这就是我根据 Barmar 的建议尝试做的事情:

#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Data::Dumper;

my $user="root";
my $password="M3m01r!@#";
my $db="DBI:$driver:database=$database";

my $dbh = DBI->connect("DBI:mysql:database=testdb;mysql_socket=/tmp/mysql.sock",$user,$password) or die "could not connect $DBI::errstr\n";
my $st = $dbh->prepare("mysql -u root -p < rr.sql") or die "$DBI::errstr\n";
$st->execute();

但是它抛出了这个错误

DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql -u root -p < rr.sql' at line 1 at dbi.pl line 15.

有人可以帮忙吗?

最佳答案

 ############################################################################
 my $st = $dbh->prepare("mysql -u root -p < rr.sql") or die "$DBI::errstr\n";
 ############################################################################

第 2 行是你的问题所在。

您提供的准备字符串应该是实际的 SQL。您已经向它提供了一个旨在运行 mysql 的 shell 命令。因此,获取 rr.sql 的内容,将其放入一个变量中(让您的程序读取它,或复制/粘贴它),然后对该变量调用prepare()。

 my $ferret_query = "select name, dob, type from ferret order by dob";
 my $sth = $dbh->prepare($ferret_query);
 $sth->execute()

关于mysql - 在perl中运行多个sql脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19852229/

相关文章:

mysql - 获取某个项目的最新条目? mysql

perl - 两个或多个链接的 PathParts ( Catalyst )

perl - 如何在没有文本的情况下获取准确的 Oracle 错误消息并存储在变量中

mysql - 从单独表中的键/值对中选择不同的值

MySQL : select 10 rows per day with order and on certain group

c# - 小于或等于日期不应允许输入

perl - 如何在 Perl 中以函数式风格编码?

perl - DBD::SQLite::st 执行失败:数据类型不匹配

mysql - 根据派生值最大值选择行

perl - 为现有子动态添加前导下划线