Автор Тема: $dbh->disconnect();  (Прочитано 3410 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
$dbh->disconnect();
« : 05 Октября 2005, 16:12:35 »
Всем осенний приветик. . :)
подскажите пож-ста, как сделать автоматическое отсоединение от бд?
пробую и END, и DESTROY, но где-то ошибаюсь исходя из того, что написано в логе:
[error] [client 127.0.0.1] …: Issuing rollback() for database handle
 being DESTROY\'d without explicit disconnect() at dbtools.pm
line 71., referer: [url]http://localhost…[/url]


вот урывки скрипта который дает эту запись в лог:
#!/usr/bin/perl -w

END { &DESTROY($dbh) if $dbh }

use strict;
no strict \'refs\';

use dbtools;

в dbtools

our $dbh;

sub connect($$) {
my ($l, $p)=@_;
$dbh = DBI->connect ("DBI:mysql:host=$HOST_DB;database=$NAME_DB", $l, $p,
               {PrintError => 0, RaiseError => 0, AutoCommit => 0});
71--> if ($dbh) {
     $dbh->do(\'SET CHARACTER SET cp1251\')  or die $DBI::errstr;
     $dbh->do(\'SET NAMES cp1251\')                 or die $DBI::errstr;
     return $dbh; }
     else {return}
    }


sub DESTROY {$dbh=shift; $dbh->disconnect(); }
пока-пока. :)

Оффлайн Wyclef

  • hello_worlder
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thug.narod.ru
$dbh->disconnect();
« Ответ #1 : 09 Октября 2005, 13:37:35 »
dbmodule.pm
use strict;
use vars qw/@ISA @EXPORT $DBH/;

require Exporter;
@ISA = qw/Exporter/;

@EXPORT = qw/
$DBH
&func_1
...
&func_n
/;

use DBI;

my $database = \'database\';
my $username = \'root\';
my $password = \'passw0rd\';

$DBH = DBI->connect("dbi:mysql:$database:localhost:3306", $username, $password, { RaiseError => 1, PrintError => 1 });

END { $DBH->disconnect() if $DBH }

sub func_1 {
...
}

...

sub func_n {
...
}

1;


script.pl
#!/usr/bin/perl

BEGIN { unshift @INC, \'/path/to/modules\' }

use strict;

use lib::dbmodule;
It\'s nice to be important, but it\'s more important to be nice!

Оффлайн AnnA

  • Фанатка форума
  • Старожил
  • ****
  • Сообщений: 263
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
$dbh->disconnect();
« Ответ #2 : 10 Октября 2005, 11:56:07 »
Wyclef
пасиба за ответ. :) "разжевали".
у меня в dbmodule есть как бы автоэкспортер:

# Экспортирует все функции в вызвавший пакет.
sub import {
    while( my ( $k, $v ) = each( %{ __PACKAGE__."::" } ) ) {
        next if substr( $k , -1 ) eq ":" || grep { $k eq $_ } qw(BEGIN import);
             *{ caller()."::".$k } = $v;
    }
}

$dbh объявлена глобальной, функция, использующая ее, в первом посте есть. :)
т.е. насколько я понимаю - дОлжно работать такой методе. ан нет.
так не хочется все переписывать.
пока-пока. :)

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28