Я пытаюсь выполнить какой-то оператор, который не будет выполнен, в методе do()
с RaiseError
флагом DBI RaiseError
, но он не вызывает исключение.
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect("DBI:mysql:database=test;host=192.168.10.101",
"test", "123456", {'RaiseError' => 1});
eval { $dbh->do("DROP TABLE foo") }; # foo table not exist
if ($@) {
print "Dropping foo failed: $@\n";
} else {
print "ok\n";
}
Этот код возвращает ok
вместо ошибки.
У меня эта проблема только на машине с Windows 7. (Когда я запускаю этот код в Linux, возникает исключение.) Это ошибка?
Версия Perl: 5.16.3, версия DBI: 1.623, версия DBD :: mysql: 4.022
Обновление DBD :: mysql до последней версии мне помогло.
eval { ... }
. Аааа, на самом деле это то, что ты хочешь сделать. Появляется ли ошибка при удаленииeval { ... }
? Тогда, возможно, попробуйтеmy $run_ok = eval { $dbh->do("DROP TABLE foo");1 }; my $err = $@; if( ! $run_ok ) { warn "<<$err>>" }
$@
чтобы увидеть, произошло ли исключение, сделайте так, чтобы eval возвращал истинное значение и проверял его возвращаемое значение. См. Mvp.kablamo.org/essentials/die-eval или попробуйте более интуитивно понятный синтаксис try / catch mvp.kablamo.org/essentials/try-catch