【发布时间】:2013-11-21 17:21:52
【问题描述】:
我已连接到一个 MySQL 数据库,该数据库托管在 Perl 的远程服务器中。现在我正在尝试使用 Perl 命令行对 subject.pl 文件中的表执行选择语句。代码是
#!/usr/bin/perl
use DBI;
use strict;
# Connected to mysql audit database in dev server
my $dsn = 'DBI:mysql:Driver={mysql}';
my $host = 'dev-mysql.learn.local';
my $database = 'subject';
my $user = 'testUser';
my $auth = 'testPassword';
my $dbh = DBI->connect("$dsn;host=$host;Database=$database",$user,$auth) or die "Database connection not made: $DBI::errstr";
# Prepare query
my $sql = "SELECT
subject_id
,subject_value
FROM
subject";
my $sth = $dbh->prepare($sql);
#Execute the statement
$sth->execute() or die "Unable to execute".$sth->errstr;
while (my @row = $sth->fetchrow_array()) {
my ($subject_id, $subject_value ) = @row;
print "$subject_id,$subject_value,$subject_db_field\n";
}
$sth->finish();
我在$sth->execute() or die "Unable to execute".$sth->errstr; 行遇到错误
错误信息是Unable to execute at D:\Demo\perl_demo\subject.pl line 24.
但是当我打印 $dbh 变量时,它给出的结果类似于DBI::db=HASH(0x1ca7884)。所以我想连接正在正确建立。
请帮我解决这个问题,因为我是 Perl 脚本的新手。
【问题讨论】:
-
你检查$dbh->prepare($sql)的返回值了吗?
-
你肯定有连接,否则它会在连接时死掉 (
connect.. or die ..) -
是的弗兰克,我检查了$dbh->prepare($sql)的返回值。它给
DBI::db=HASH(0x1ca74f4)