Perl Database API





6
Date Submitted Thu. Aug. 31st, 2006 8:44 AM
Revision 1 of 1
Scripter ctiggerf
Tags API | Database | mysql | Perl
Comments 3 comments
A database API written in Perl for a MySQL.

You will need to edit the settings for your server.

Enojy


use strict;
use DBI;

# edit these to match your server's settings
my $database="MyDatabaseName";
my $user="someuser";
my $password="somepass";
my $dbhost="MyHost";

my $dbh;
my $sth;

#############################################################
sub connect {
        $dbh=DBI->connect("DBI:mysql:database=$database;host=$dbhost", $user, $password)
                or &handle_error("Cannot open database $database. $DBI::errstr");
        return ($dbh)
}

sub disconnect {
        if(defined $sth) { my $rc=$sth->finish; }
        if(defined $dbh) { my $rc=$dbh->disconnect or &handle_error ("Error on disconnect. $DBI::errstr"); }
}
#############################################################
# you could edit this to write to a log or send you an email
#  or whatever you wanted
sub handle_error {
        my $error_string = "Server name: ".$ENV{SERVER_NAME}."\n";
        $error_string .= "Request: ".$ENV{REQUEST_URI}."\n";
        $error_string .= "Method: ".$ENV{REQUEST_METHOD}."\n";
        $error_string .= "Cookies: ".$ENV{HTTP_COOKIE}."\n";
        $error_string .= "Remote address: ".$ENV{REMOTE_ADDR}."\n";

        my $buf;
        if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN,$buf,$ENV{'CONTENT_LENGTH'}); }
        else { $buf=$ENV{'QUERY_STRING'}; }

        $error_string .= "Variables: ".$buf."\n\n\n";
        $error_string .= "Error: \"@_\"";

        #now you have an error message
        #you could do whatever you wanted with

        # I wouldn't display all that info to your user though
        exit 0;
}
#############################################################
#just execute a sql qry .. no return .. fails safely
sub safe_do {
        my $sql=$_[0];
        $dbh->do($sql) or &handle_error ("SQL statement failed: $sql; ERROR DESCRIPTION: $DBI::errstr");
}

#############################################################
#just execute a sql qry and ignore all errors that are non-fatal
sub unsafe_do {
        my $sql=$_[0];
        return $dbh->do($sql);
}

#############################################################
#returns a single row of values
sub safe_select_row {
        my $sql=$_[0];
        my @row=$dbh->selectrow_array($sql);
        &handle_error ("SQL statement failed: $sql; ERROR DESCRIPTION: $DBI::errstr") if $DBI::errstr;
        return @row;
}
#############################################################
#retrurns a single row of values as a referrence
sub safe_select_row_ref {
        my $sql=$_[0];
        my $row=$dbh->selectrow_arrayref($sql);
        &handle_error ("SQL statement failed: $sql; ERROR DESCRIPTION: $DBI::errstr") if $DBI::errstr;
        return $row;
}

#############################################################
#returns a single row of values in a hash referrence
sub safe_select_row_hashref {
        my $sql=$_[0];
        my $sth=$dbh->prepare($sql)
                or &handle_error ("SQL statement failed: $sql; ERROR DESCRIPTION: $DBI::errstr");
        $sth->execute()
                or &handle_error ("SQL statement failed: $sql; ERROR DESCRIPTION: $DBI::errstr");
        my $row=$sth->fetchrow_hashref();
        #$sth->finish();
        return $row;
}

#############################################################
#returns a result
sub select_rows {
        my $sql=$_[0];
        my $sth=$dbh->prepare($sql)
                or &handle_error ("prepare failed: $sql; ERROR DESCRIPTION: $DBI::errstr");
        $sth->execute() or &handle_error ("execute failed: $sql; ERROR DESCRIPTION: $DBI::errstr");
        return $sth;
}

#############################################################
#returns all rows in an array reference
sub select_all_rows {
        my $sql=$_[0];
        my $sth=select_rows($sql);
        my $rows=$sth->fetchall_arrayref();
        return $rows;
}


#############################################################
#checks to see if a table exits
sub table_exists {
        my ($table)=@_;
        my @names=$dbh->tables();
        my $field;

        foreach $field (@names) {
                if($field eq $table) { return 1; }
        }
       
        return 0;
}

#############################################################
#exec sql statement, returns the number of rows affected
sub exec {
        my($sql)=@_;

        my $sth=$dbh->prepare($sql)
                or &handle_error ("Can't prepare statement '$sql': $DBI::errstr");

        my $rows_affected=$sth->execute
                or &handle_error ("Can't execute statement '$sql': $DBI::errstr");

        return $rows_affected;
}

#############################################################
#exec sql statement with values, returns the number of rows affected
sub execWithValues {
        my($sql,@values)=@_;

        my $sth=$dbh->prepare($sql)
                or &handle_error ("Can't prepare statement '$sql': $DBI::errstr");

        my $rows_affected=$sth->execute(@values)       
                or &handle_error ("Can't execute statement '$sql': $DBI::errstr");

        return $rows_affected;
}
 

Chris Falzone

www.eadexchange.com

Comments

Comments I don't understand
Wed. Oct. 11th, 2006 6:15 PM    Helper jeremec
  Comments The Reason
Mon. Oct. 16th, 2006 7:18 AM    Scripter ctiggerf
    Comments DBI
Mon. Feb. 11th, 2008 6:17 PM    Beginner chorny

Voting