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(); }
In reply to RFC: Simple DBI abstraction by Jaap
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |