SPUG: DBI bind_param in MySQL
Ivan Heffner
ivandh at comcast.net
Fri Nov 26 18:13:51 CST 2004
To kind of follow up on what Colin said, what you are actually sending over
the pipe to MySQL is:
SELECT 'first_name' FROM bod
which most likely not what you want. Say you have a list of columns that
you want to select:
my @columns = qw(
first_name
middle_name
last_name
suffix
title
company
image_file
);
You can dynamically build your query, but not by using bind params:
my $query = 'select '.join(', ', @columns).' from bod';
You use the bind params in the WHERE clause of you query so that you can
prepare a query once and execute it multiple times with different values to
the WHERE section.
$query .= ' where first_name = ? and last_name = ?';
my $sth = $dbh->prepare($query);
my $results = [];
for my $fname (qw(Mike Joe John)) {
for my $lname (qw(Jones Smith Brown Doe)) {
$sth->execute($fname, $lname);
my $r = $sth->fetchall_arrayref();
push @$results, @$r;
}
}
__END__
Ivan
At 11/26/2004 02:53 PM, Colin Meyer wrote:
>On Fri, Nov 26, 2004 at 02:16:45PM -0800, Michael R. Wolf wrote:
> >
> > When I try this, I get a literal (e.g. "first_name") in the output,
> > not the value of the field.
> >
> > my $sth = $dbh->prepare("SELECT ? FROM bod")
> > or die "Cannot create sth: $DBI::errstr";
> >
> > $sth->bind_param(1, "first_name");
> >
> > $sth->execute()
> > or die "Cannot execute statement: $DBI::errstr";
> >
> > Am I missing something important, or is this feature unavailable with
> > MySQL?
>
>Every relational database that I have used (including MySQL) only lets
>you use placeholders for values, not for identifiers (e.g. column or
>table names).
>
>You could, for example:
>
> my $sth = $dbh->prepare( <<'End_of_SQL' );
> SELECT first_name
> FROM bod
> WHERE first_name LIKE ?
> End_of_SQL
>
> $sth->execute( 'Mi%' );
>
>-Colin.
>_____________________________________________________________
>Seattle Perl Users Group Mailing List
>POST TO: spug-list at mail.pm.org http://spugwiki.perlocity.org/
>ACCOUNT CONFIG: http://mail.pm.org/mailman/listinfo/spug-list
>MEETINGS: 3rd Tuesdays, Location: Amazon.com Pac-Med
>WEB PAGE: http://seattleperl.org/
More information about the spug-list
mailing list