我正在执行类似于以下的脚本,当操作失败时,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“
答案 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)
err
和errstr
是DBI
模块的方法,而不是语句句柄。你应该说
my $errcode = $dbh->err();
my $errstring = $dbh->errstr; # or DBI->errstr or $DBI::errstr