in reply to Best way to call DBI query

hakkr,

I'm not sure why you're currently getting error messages, maybe something else is overwriting dbh. But I am concerned about your lack of error checking and your use of prepare (and if this was just a stripped down example, much apologies).

my $dbh = $self->param('dbh') or carp "dbh is not behaving\n"; ... $sth->execute() or carp "problems executing ...\n"

note bad code showing use of "do" vice prepare deleted - it was just wrong but you probably should try prepare_cached and bind_params.

my $query = "SELECT id FROM table WHERE user = ?"; my $results=$self->query($query, $user )->fetchrow_array; sub query { # Do database query my($self, $sql, $val ) = @_; my $dbh=$self->param('dbh') or die "what's up with dbh?\n"; my $sth = $dbh->prepare_cached( $sql ); $sth->execute( $val ); return $sth; }

But maybe I'm all wet and you were just showing a snippet.

-derby Update: nevermind that whole "do" thingy - that only works on non-SELECT sql. drats.

Replies are listed 'Best First'.
Re: Re: Best way to call DBI query
by hakkr (Chaplain) on Mar 14, 2002 at 15:20 UTC
    Derby, I am using raise error, as for prepare I just thought that it gave the database a chance to optimise the query and get ready for action. I tried it woith do instead of prepare and got can't call do on undefined value. I put in my $dbh=$self->param('dbh') or die 'it is undef'; and it did't die

    MZSanford the db handle is defined cos I use it elsewhere. Weird thing is I am getting the erro even though my program does not even call the sub anywhere.

    cheers
    UPDATE Problem solved, I am using CGI::Application which has a method called query, calling my subroutine 'query' has caused this rather unhelpful error. Thanks for the tips anyway, maybe I should have mentioned CGI::application to begin with. A failed unintentional attempt at method overriding ha:)