Jaap has asked for the wisdom of the Perl Monks concerning the following question:
The module code is below:use DBIx::Easy; my $dbez = DBIx::Easy->new("DBI:mysql:database=mydb;host=localhost", ' +dbusername', 'dbpassword'); foreach ($dbez->do(tableName => 'mytable', get => {'column_name' => 'v +alue', 'another_column_name' => 'another value'}, set => {'column_nam +e' => 16})) { foreach my $key (keys %$_) { print "$key: ", $$_{$key} || '', "\t"; } print "\n"; }
package DBIx::Easy; use strict; use warnings; use DBI; sub new { my $class = shift; my @connectionParameters = @_; my $self = {}; bless($self, $class); $self->{'dbh'} = DBI->connect(@connectionParameters); return $self; } sub do { my $self = shift; my $tableName = shift; my $getRef = shift; my $setRef = shift; if ($setRef && ref($setRef) eq 'HASH' && %$setRef) { if ($getRef && ref($getRef) eq 'HASH' && %$getRef) { ### update my @results = $self->select($tableName, $getRe +f); $self->update($tableName, $getRef, $setRef); for (my $i = 0; $i < @results; $i++) { foreach (keys %$setRef) { $results[$i]->{$_} = $$setRef{ +$_}; } } return @results; } else { ### insert $self->insert($tableName, $setRef); return ($setRef); } } ### select return $self->select($tableName, $getRef); } sub select { my $self = shift; my $tableName = shift; my $dataRef = shift; my $dbquery = "select * from $tableName"; my $counter = 0; my @placeholder = (); foreach (keys %$dataRef) { $dbquery .= $counter ? ' and ' : ' where '; $dbquery .= "$_=?"; push (@placeholder, $$dataRef{$_}); $counter++; } my $sth = $self->{'dbh'}->prepare($dbquery); $sth->execute(@placeholder); my @result; while (my $ref = $sth->fetchrow_hashref()) { push (@result, $ref); } $sth->finish(); return @result; } sub insert { my $self = shift; my $tableName = shift; my $dataRef = shift; my $dbquery = "insert into $tableName("; $dbquery .= join(", ", (keys %$dataRef)); $dbquery .= ") values("; $dbquery .= join (", ", map('?', (keys %$dataRef))); $dbquery .= ")"; my $sth = $self->{'dbh'}->prepare($dbquery); $sth->execute(values %$dataRef); } sub update { my $self = shift; my $tableName = shift; my $getRef = shift; my $setRef = shift; #$rows_affected = $dbh->do("UPDATE your_table SET foo = foo + +1"); #UPDATE search SET Category = 'Java', Test = '1' WHERE Categor +y = 'Jive' AND Test = '2'; my $dbquery = "update $tableName set "; $dbquery .= join(", ", map ("$_=?", keys %$setRef)); $dbquery .= " where "; $dbquery .= join(" and ", map ("$_=?", keys %$getRef)); my $sth = $self->{'dbh'}->prepare($dbquery); $sth->execute(values %$setRef, values %$getRef); } sub DESTROY { my $self = shift; $self->{'dbh'}->disconnect(); }
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: RFC: Simple DBI abstraction
by Juerd (Abbot) on Sep 08, 2004 at 22:10 UTC | |
by Jaap (Curate) on Sep 09, 2004 at 08:13 UTC | |
by Juerd (Abbot) on Sep 09, 2004 at 13:35 UTC | |
by Jaap (Curate) on Sep 09, 2004 at 16:20 UTC | |
•Re: RFC: Simple DBI abstraction
by merlyn (Sage) on Sep 08, 2004 at 20:44 UTC | |
by Jaap (Curate) on Sep 08, 2004 at 20:46 UTC | |
by merlyn (Sage) on Sep 08, 2004 at 20:50 UTC | |
Maybe too simple
by htoug (Deacon) on Sep 09, 2004 at 06:05 UTC | |
by Juerd (Abbot) on Sep 09, 2004 at 13:40 UTC | |
Re: RFC: Simple DBI abstraction
by CountZero (Bishop) on Sep 08, 2004 at 21:18 UTC | |
by Jaap (Curate) on Sep 08, 2004 at 21:52 UTC | |
Re: RFC: Simple DBI abstraction
by iburrell (Chaplain) on Sep 09, 2004 at 16:44 UTC |