Ошибка не указана для сбоя в работе модуля 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";