Perl DBI模块中的操作失败没有指示错误

时间:2013-06-20 23:23:03

标签: mysql windows perl dbi strawberry-perl

我正在执行类似于以下的脚本,当操作失败时,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说:“这是perl 5,版本16,颠覆3(v5.16.3) )为MSWin32-x86-multi-thread“

构建

2 个答案:

答案 0 :(得分:0)

DBI->连接( “DBI:MySQL的:数据库= $分贝:主机= $主机”,     $ user,$ password)或死“哎呀:$ DBI :: errstr \ n”;

它应该是,试试这可能有效

DBI->连接( “DBI:MySQL的:$分贝:$主机:$ PORTNUMBER”,     $ user,$ password)或死“哎呀:$ DBI :: errstr \ n”;

我使用过ActivePerl,我们需要传递mysql端口号,默认情况下是3306。

DBI->连接( “DBI:MySQL的:$分贝:$主机:3306”,     $ user,$ password)或死“哎呀:errstr $!\ n”;

答案 1 :(得分:0)

errerrstrDBI模块的方法,而不是语句句柄。你应该说

my $errcode = $dbh->err();
my $errstring = $dbh->errstr;  # or  DBI->errstr  or  $DBI::errstr