Ошибка не указана для сбоя в работе модуля Perl DBI

Я выполняю скрипт, подобный следующему, и когда происходит сбой операции, 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=

Я работаю с Strawberry Perl (32-разрядная версия) в 64-разрядной системе Windows 7. (Я работаю с 32-битной версией, потому что другой модуль, который я использую, не будет работать с 64-битной версией.) perl.exe --version говорит: "Это Perl 5, версия 16, Subversion 3 (v5.16.3), созданный для многопоточности MSWin32-x86"

2 ответа

err а также errstr методы DBI модуль, а не оператор заявления. Ты должен сказать

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

DBI->connect("DBI:mysql:database=$db:host=$host", $user, $password) или die "Упс: $DBI::errstr\n";

это должно быть похоже, попробуйте это может работать

DBI->connect("DBI:mysql:$db:$host:$portNumber", $user, $password) или die "Упс: $DBI::errstr\n";

Я использовал ActivePerl, нам нужно передать номер порта MySQL, по умолчанию это будет 3306.

DBI-> connect ("DBI: mysql: $ db: $ host: 3306", $ user, $ password) или die "Упс:errstr $! \ N";

Другие вопросы по тегам