G'day djlerman,
"What is the useful wisdom around this?"
TMTOWTDI.
Here's how I might tackle this.
-
Make use of the strict and warnings pragmata.
-
Use lexical (e.g. my) variables instead of package variables.
-
Present "valuesForIn" as an array.
-
Interpolate the "IN (...)" code directly into $query.
See "perlsecret: Baby cart"
if you're unfamiliar with the construct that I've used.
-
Fix "die->$errstr()", which should be "die $dbh->$errstr()",
if you enjoy typing and want to repeatedly code that same exception message.
Alternatively, and my preference, employ "the first great virtue of a programmer",
namely laziness,
and take advantage of DBI's RaiseError attribute.
In the code example below, I've used all of these features.
The two print statements show how the variables are interpolated into the prepare() and execute() methods
(note that @valuesForIn expands to a space-separated list in the double-quoted string).
$ perl -e '
use strict;
use warnings;
# Somewhere earlier in your code, something like this:
# my $dbh = DBI->connect(
# $data_source, $username, $auth,
# {RaiseError => 1, ...}
# );
my @valuesForIn = 1..5;
my $query = qq{
SELECT field1
FROM table1
WHERE field2 IN (@{[join ",", qw{?} x @valuesForIn]})
};
print "my \$sth1 = \$dbh->prepare($query);\n";
print "\$sth1->execute(@valuesForIn);\n";
'
my $sth1 = $dbh->prepare(
SELECT field1
FROM table1
WHERE field2 IN (?,?,?,?,?)
);
$sth1->execute(1 2 3 4 5);
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.