Chris Winters ([EMAIL PROTECTED]) said something to this effect on 05/02/2001:
> package MyServer::DB;
> 
> use strict;
> use DBI;
> 
> my $DB_USER = 'xxxx';
> my $DB_PASS = 'yyyy';
> 
> sub connect {
>     my ( $class, $dbname ) = @_;
>     my $dbh = DBI->connect( 'DBI:mysql:mysql', $DB_USER, $DB_PASS,
>                             { RaiseError => 1 } )
>                    || die "$DBI::errstr\n";
>     $dbh->do( "use $dbname" ) if ( $dbname );
>     return $dbh;
> }

I wrote something like this once:

#######################################################################
package MyDB;
use DBI;
use base 'DBI::db';

{
    my $dsn;
    sub import {
        my $class = shift;
        while (@_) {
            my ($n, $v) = splice @_, 0, 2;
            $dsn->{$n} = $v;
        }
    }

    sub new {
        my $class = shift;
        my $dbh = DBI->connect(
            sprintf('dbi:mysql:%s:%s', @{$dsn}{'database','hostname'}),
            $dsn->{'username'}, $dsn->{'password'},
            { RaiseError => 1 });
        bless $dbh, $class;
    }
}

sub DESTROY { shift->disconnect }

1;
#######################################################################

(With a little sanity checking inside &import to make sure all
the required entries at least have reasonable defaults).

Which gets used like so:

    #!/usr/bin/perl
    use MyDB username => 'foo', password => 'bar';
    my $db = MyDB->new;

It makes all the database stuff a little cleaner, and a little
better encapsulated.

(darren)

-- 
Pessimests are right more often, but optimists are happy more often.

Reply via email to