1

我正在执行类似于以下的脚本,当操作失败时,该execute函数返回一个未定义的值,因此我可以检测到它失败了,这很好。但是,我发现err()errstr没有返回任何东西。我期望分别得到错误代码和错误消息。我做错了什么?感谢您提供任何信息。

use DBI;
$db="foobar";
$host="localhost";
$user="root";
$password="mypassword";

my $dbh = DBI->connect("DBI:mysql:database=$db:host=$host",
    $user, $password) or die "Oops: $DBI::errstr\n";

my $sth = $dbh->prepare("invalid sql");
my $returnval = $sth->execute();
my $errcode = $sth->err();
my $errstring = $sth->errstr;
print "returnval=$returnval, errcode=$errcode, errstring=$errstring\n";

输出:

returnval=, errcode=, errstring=

我在 64 位 Windows 7 系统上使用 Strawberry Perl(32 位)。(我正在使用 32 位版本,因为我使用的另一个模块不适用于 64 位版本。)perl.exe --version说:“这是为 MSWin32 构建的 perl 5,版本 16,subversion 3 (v5.16.3)- x86-多线程"

4

2 回答 2

0

DBI->connect("DBI:mysql:database=$db:host=$host", $user, $password) or die "Oops: $DBI::errstr\n";

应该是这样,试试这个可能有用

DBI->connect("DBI:mysql:$db:$host:$portNumber", $user, $password) or die "Oops: $DBI::errstr\n";

我用过ActivePerl,我们需要传递mysql的端口号,默认是3306。

DBI->connect("DBI:mysql:$db:$host:3306", $user, $password) or die "Oops:errstr $!\n";

于 2013-06-21T11:37:47.667 回答
0

err并且errstrDBI模块的方法,而不是语句句柄。你应该说

my $errcode = $dbh->err();
my $errstring = $dbh->errstr;  # or  DBI->errstr  or  $DBI::errstr
于 2013-06-21T15:01:37.537 回答