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, $getRef); $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 Category = '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(); }