Hi List,
Sorry if this is a little offtopic but I'm trying to learn DBI for a
CGI I'm writing. Been reading http://www.perldoc.com/cpan/DBI.html but
seems a little over complex for what I need...just inserts, updates, and
queries really. Portability isn't too important. Probably going to use
DBD::ODBC on top of it anyway. Also trying to learn about packages and OOP
with perl at the same time...yikes.
Basically, i'm trying to write a little abstraction layer so that I can say
things like:
$dbh = MyPackages::DB->new(); #handles my connection stuff.
#and then
my @values = $dbh->getvalues("username","users");
#or maybe,
my @rowsHashRefs = @{$dbh->query("select username,email from users")};
#and then
foreach my $hashRef (@rowsHashRefs){
my %row = %{$hashRef};
#some html...
print "user $row{'username'}'s email is $row{'email'}";
#or whatever
}
Not sure how much code I'm actually saving by doing this...Does anybody have
experience using DBI or any tricks for keeping things simple and avoiding
excessive prepare, execute, selectall_hashrefs...etc.
Secondly, I thought I had something working (see my "package" below) but
it's complaining that I'm only passing one argument to selectall_hashref
despite the documentation saying you can use just a simple statement.
here's the error: Usage: $h->selectall_hashref($statement, $keyfield [,
\%attr [, @bind_params ] ]) at Score/DB.pm line 56.
Thanks for any pointers...
-peter
here's the package that I'm trying to write: (be warned: It's ugly)
use strict;
use DBI;
use DBD::ODBC;
package MyPackages::DB;
sub new {
#my $class=shift;
my $self={};
bless $self;
#go ahead and connect
$self->connect();
return $self;
}
sub connect{
my $self = shift;
$self->{dbh} =
DBI->connect("dbi:ODBC:myDSN","username","sekretpassword",{
AutoCommit=>0,
RaiseError=>1}) or die("Can't connect! $!");
}
sub getValue{
my ($self,$field,$table,$condition) = @_;
return if($#_<2);
my @rowHashRefs;
if($condition){
@rowHashRefs = @{$self->query("Select $field from $table
where $condition")};
}else{
@rowHashRefs = @{$self->query("select $field from $table")};
}
#get at our hash from our arrayref [0] and pull out the value of
field:$field
#if ($#rowHasheRefs == 0){
# return ${${$arrayRef}[0]}{$field};
#}
my @fieldValues;
foreach my $rowHashRef (@rowHashRefs){
push(@fieldValues,${$rowHashRef}{$field});
}
#give back the array of values ...or do I want a reference to it?
return @fieldValues;
}
sub query{
my ($self,$qry) = @_;
return unless($qry);
return $self->{dbh}->selectall_hashref($qry); #why does it complain
here????????
}
1;
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]