Forum Webscript.Ru

Программирование => Perl => Тема начата: Jslab от 02 Февраля 2005, 13:18:30

Название: Как отследить, прошла ли sql-запись?
Отправлено: Jslab от 02 Февраля 2005, 13:18:30
Выполняю запись -
my $dbh=DBI->connect("DBI:mysql:database=mydb;host=name","root", "",{\'RaiseError\' => 1});
$msg.="DBI - $!";
my $sth=$dbh->do("INSERT INTO bb_users (user_id, ... ) VALUES ($user_id, ...)");
$msg.="Ok ?!";
...
вроде нормально, но если id неправильное -
запись не происходит и вылетает системное сообщение -
DBD::mysql::db do failed: Duplicate entry ...
(если сделать RaiseError=0 ), то это сообщ. не выводится)
Как выполнить проверку, что транзакция прошла успешно ?
на php это так -
if ( !($result = $db->sql_query($sql, BEGIN_TRANSACTION)) )
Название: Как отследить, прошла ли sql-запись?
Отправлено: ondr от 02 Февраля 2005, 13:25:57
метод do() из пакета DBI возвращает undef в случае критической ошибки или число - колличество изменённых/созданных/удаленных записей. Причем результат 0 заменяется на 0E0.

perldoc DBI
Название: Как отследить, прошла ли sql-запись?
Отправлено: Jslab от 02 Февраля 2005, 17:53:45
Верно! , работает - if( $sth eq 1) Ok...
только надо убрать RaiseError из подключения -
my $dbh=DBI->connect
"DBI:mysql:database=mydb;host=name","root", "");
(иначе вылетит системное сообщ.
и до проверки дело просто не дойдёт...)