<div>Сегодня коллега указал мне на интересное поведение модуля DBI. Пример:<br clear="all"></div><div><br></div><div><br></div><div><br></div><div>#!/usr/bin/perl<br><br>use strict;<br>use warnings;<br>use DBI;<br>use Data::Dumper;<br>
<br>my $dbh = DBI->connect('dbi:mysql:test', 'root', '') or die $!;<br></div><div><br></div><div># ===<br>my $sth = $dbh->prepare('call hello()');<br>$sth->execute() or die $!;<br>
<br>while(my @data = $sth->fetchrow_array()) {<br>  print "data: ".Dumper(\@data);<br>}</div><div># ===<br><br>print "ping: ".Dumper($dbh->ping());<br></div><div><br></div><div><br></div><div><br>
</div><div>В этом примере $dbh->ping() возвращает ложь</div><div><br></div><div>Если запихнуть выделенное место в скоп или написать перед последним print $sth->finish(), ping вернет истину. Если вместо вызова хранимой процедуры написать обычный запрос, также получим истину.</div>
<div><br></div><div>Похоже, что проблема проявляется только на MySQL и только при работе с хранимыми процедурами.</div><div><br></div><div>Интересно, почему DBI так себя ведет?</div><br>-- <br>С уважением, Александр<br>Личный блог: <a href="http://eax.me/" target="_blank">http://eax.me/</a><br>
Мой форум: <a href="http://it-talk.org/" target="_blank">http://it-talk.org/</a><br>Мой Twitter: <a href="http://twitter.com/afiskon" target="_blank">http://twitter.com/afiskon</a><br><br>