Forum Webscript.Ru

Программирование => Perl => Тема начата: Inecs от 21 Марта 2006, 18:23:32

Название: Коннект/Дисконнект к БД MySQL
Отправлено: 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 процесс. Вопрос в следующем, как принудительно закрыть коннект.
Или у меня руки кривоваты. Мож подправите, если что не так. Спасибо.
Название: Коннект/Дисконнект к БД MySQL
Отправлено: NeoNox от 21 Марта 2006, 18:34:00
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
Отправлено: Inecs от 21 Марта 2006, 18:38:54
Это чтож получается, это глюк самого MySQLфронта?
Вот блин... А я полчаса голову ломаю.
Кстати, а стоит ли обьявлять $dbh как глобальную переменную?
Название: Коннект/Дисконнект к БД MySQL
Отправлено: NeoNox от 21 Марта 2006, 18:43:10
Цитировать
Inecs:
Это чтож получается, это глюк самого MySQLфронта?

Это вы из процитированного куска мана такой вывод сделали?
Поставьте варн и увидите что он вам скажет.

Цитировать
Inecs:
Кстати, а стоит ли обьявлять $dbh как глобальную переменную?

В 99% случаях это можно/нужно делать.
Название: Коннект/Дисконнект к БД MySQL
Отправлено: Inecs от 21 Марта 2006, 18:48:22
Варн поставил сразу. Молчит. Поэтому и сделал такой вывод. Что это глюк Фронта.
Название: Коннект/Дисконнект к БД MySQL
Отправлено: NeoNox от 21 Марта 2006, 19:02:34
А что mysqladmin processlist говорит?
Название: Коннект/Дисконнект к БД MySQL
Отправлено: cr4ck3r от 22 Марта 2006, 12:35:50
Из своего опыта, обычно работаю так:
В модуль выносим функцию:
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.
Хотя это мое субъективное мнение.