Forum Webscript.Ru

Программирование => Perl => Тема начата: lamerz от 25 Января 2007, 17:24:12

Название: Wrapper DBI
Отправлено: lamerz от 25 Января 2007, 17:24:12
Правильно ли я сделал модуль?

Это мой первый, прошу не ругать:)



package Mydbi;
use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(connect query execute select_row db_error);
use strict;

my ($dbh,$prefix_db);

$prefix_db="Префикс таб.";

sub connect
{
  if (!$ENV{\'MOD_PERL\'}) { require DBI; }

  my $db_host = "host";
  my $db_name = "name";
  my $db_user = "user";
  my $db_pass = "pass";

$dbh = DBI->connect("DBI:mysql:database=$db_name;host=$db_host",
           $db_user,$db_pass) or db_error($DBI::errstr);

  $dbh->do(\'SET NAMES "CP1251"\');

  if (!$ENV{\'MOD_PERL\'}) { $dbh->{\'Warn\'} = 0;}
 return $dbh;
}

sub query
{
  my ($sql, $attr, @params) = @_;
  $sql=~s/{prefix}/$prefix_db/;
$dbh->do($sql, $attr, @params) or db_error($DBI::errstr);
}

sub execute
{
  my $sql = shift;
  $sql=~s/{prefix}/$prefix_db/;
  my $sth = $dbh->prepare($sql) or db_error($DBI::errstr);
  $sth->execute or db_error($DBI::errstr);
 return $sth;
}

sub select_row
{
  my $sql = shift;
  $sql=~s/{prefix}/$prefix_db/;
  my $sth = $dbh->prepare($sql) or db_error($DBI::errstr);
  $sth->execute or db_error($DBI::errstr);
  my $result = $sth->fetchrow_hashref;
  $sth->finish;
 return $result;
}

sub db_error()
{
  my $dbi_err = shift;
  print "Content-type: text/html\\n\\n";
  print $dbi_err;
  die;
}

END { $dbh->disconnect() if defined($dbh) }

1;