Автор Тема: Как отследить, прошла ли sql-запись?  (Прочитано 3071 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Jslab

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 62
  • +0/-0
  • 0
    • Просмотр профиля
    • http://arkproject.com/intertype
Как отследить, прошла ли sql-запись?
« : 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)) )

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Как отследить, прошла ли sql-запись?
« Ответ #1 : 02 Февраля 2005, 13:25:57 »
метод do() из пакета DBI возвращает undef в случае критической ошибки или число - колличество изменённых/созданных/удаленных записей. Причем результат 0 заменяется на 0E0.

perldoc DBI
0 OK, 0:1

Оффлайн Jslab

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 62
  • +0/-0
  • 0
    • Просмотр профиля
    • http://arkproject.com/intertype
Как отследить, прошла ли sql-запись?
« Ответ #2 : 02 Февраля 2005, 17:53:45 »
Верно! , работает - if( $sth eq 1) Ok...
только надо убрать RaiseError из подключения -
my $dbh=DBI->connect
"DBI:mysql:database=mydb;host=name","root", "");
(иначе вылетит системное сообщ.
и до проверки дело просто не дойдёт...)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28