[Moscow.pm] $dbh->ping() и хранимые процедуры

Alexandr Alexeev afiskon на gmail.com
Пт Апр 6 02:22:12 PDT 2012


Сегодня коллега указал мне на интересное поведение модуля 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
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20120406/257f66c4/attachment.html>


Подробная информация о списке рассылки Moscow-pm