Сегодня коллега указал мне на интересное поведение модуля DBI. Пример:



#!/usr/bin/perl

use strict;
use warnings;
use DBI;
use Data::Dumper;

my $dbh = DBI->connect('dbi:mysql:test', 'root', '') or die $!;

# ===
my $sth = $dbh->prepare('call hello()');
$sth->execute() or die $!;

while(my @data = $sth->fetchrow_array()) {
  print "data: ".Dumper(\@data);
}
# ===

print "ping: ".Dumper($dbh->ping());



В этом примере $dbh->ping() возвращает ложь

Если запихнуть выделенное место в скоп или написать перед последним print
$sth->finish(), ping вернет истину. Если вместо вызова хранимой процедуры
написать обычный запрос, также получим истину.

Похоже, что проблема проявляется только на MySQL и только при работе с
хранимыми процедурами.

Интересно, почему DBI так себя ведет?

-- 
С уважением, Александр
Личный блог: http://eax.me/
Мой форум: http://it-talk.org/
Мой Twitter: http://twitter.com/afiskon
-- 
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить