Forum Webscript.Ru
Программирование => Perl => Тема начата: Inecs от 21 Марта 2006, 18:23:32
-
Вот возник ещё один вопрос. Есть две подпрограммы:
sub DBconnect {
our $dbh = DBI->connect("DBI:mysql:$DBconf{DBname}:$DBconf{DBserver}:$DBconf{DBport}", $DBconf{DBuser}, $DBconf{DBpassword});
}
sub DBdisconnect {
our $dbh->disconnect;
}
Которые отвечают за коннект к БД.
Коннектимся просто отлично. Но через MySQLFront видно, что после коннекта и запуска подпрограммы дисконнекта остаётся sleep процесс. Вопрос в следующем, как принудительно закрыть коннект.
Или у меня руки кривоваты. Мож подправите, если что не так. Спасибо.
-
perldoc DBI:
$dbh->disconnect or warn $dbh->errstr;
If you disconnect from a database while you still have active statement handles (e.g., SELECT statement handles that may have more data to fetch), you will get a warning. The warning may indicate that a fetch loop terminated early, perhaps due to an uncaught error. To avoid the warning call the finish method on the active handles.
-
Это чтож получается, это глюк самого MySQLфронта?
Вот блин... А я полчаса голову ломаю.
Кстати, а стоит ли обьявлять $dbh как глобальную переменную?
-
Inecs:
Это чтож получается, это глюк самого MySQLфронта?
Это вы из процитированного куска мана такой вывод сделали?
Поставьте варн и увидите что он вам скажет.
Inecs:
Кстати, а стоит ли обьявлять $dbh как глобальную переменную?
В 99% случаях это можно/нужно делать.
-
Варн поставил сразу. Молчит. Поэтому и сделал такой вывод. Что это глюк Фронта.
-
А что mysqladmin processlist говорит?
-
Из своего опыта, обычно работаю так:
В модуль выносим функцию:
sub DBconnect {
my $DBconf=shift;
return (DBI->connect(" DBI:mysql:$DBconf->{DBname}:$DBconf->{DBserver}:$DBcon
f->{DBport}", $DBconf->{DBuser}, $DBconf->{DBpassword});
}
Из основной программы работаю так:
my $dbh=DBconnect (\\%config);
.....
$dbh->disconnect;
Имхо, так хэндлер базы более контролируем, чем с объявлением типа our.
Хотя это мое субъективное мнение.