Модуль Perl DBI не вызывает исключение

0

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

  • 0
    Возникает исключение, но вы ловите его и выбрасываете, используя eval { ... } . Аааа, на самом деле это то, что ты хочешь сделать. Появляется ли ошибка при удалении eval { ... } ? Тогда, возможно, попробуйте my $run_ok = eval { $dbh->do("DROP TABLE foo");1 }; my $err = $@; if( ! $run_ok ) { warn "<<$err>>" }
  • 0
    Я не уверен, что это проблема, но не проверяйте $@ чтобы увидеть, произошло ли исключение, сделайте так, чтобы eval возвращал истинное значение и проверял его возвращаемое значение. См. Mvp.kablamo.org/essentials/die-eval или попробуйте более интуитивно понятный синтаксис try / catch mvp.kablamo.org/essentials/try-catch
Теги:
dbi
perl5

1 ответ

0

Обновление DBD :: mysql до последней версии мне помогло.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню