Beefy Boxes and Bandwidth Generously Provided by pair Networks chromatic writing perl on a camel
Do you know where your variables are?
 
PerlMonks  

Re: if/else options

by busunsl (Vicar)
on Aug 20, 2009 at 11:37 UTC ( #790065=note: print w/ replies, xml ) Need Help??


in reply to if/else options

Something like

my @where; my $sql = 'select * from table'; push @where, 'column1 = "' . $var1 . '" ' if defined $var1; push @where, 'column2 = "' . $var2 . '" ' if defined $var2; push @where, 'column3 = "' . $var3 . '" ' if defined $var3; $sql = $sql . ' where ' . join(' and ', @where);
would do the trick.

When you put the values into an array, it would be even better:

my @values = (undef, $var1, $var2, $var3); my @where; my $sql = 'select * from table'; foreach my idx (1..3) { push @where, qq(column$dx = "$values[$idx]") if defined $values[$idx +]; } $sql = $sql . ' where ' . join(' and ', @where);


Comment on Re: if/else options
Select or Download Code
Re^2: if/else options
by Melly (Hermit) on Aug 20, 2009 at 11:52 UTC
    ... and don't forget to handle the case where no values have been supplied (return an error or all results). e.g.
    $sql = $sql . ' where ' . join(' and ', @where) if defined $where[0];
    map{$a=1-$_/10;map{$d=$a;$e=$b=$_/20-2;map{($d,$e)=(2*$d*$e+$a,$e**2 -$d**2+$b);$c=$d**2+$e**2>4?$d=8:_}1..50;print$c}0..59;print$/}0..20
    Tom Melly, pm (at) cursingmaggot (stop) co (stop) uk
Re^2: if/else options
by dsheroh (Parson) on Aug 21, 2009 at 11:41 UTC
    Except, of course, that interpolating user-supplied input directly into your SQL statements is bad ju-ju. Much better would be:
    my @where; my @values; my $sql = 'select * from table'; if defined $var1 { push @where, 'column1 = ?'; push @values, $var1; } if defined $var2 { push @where, 'column2 = ?'; push @values, $var2; } if defined $var3 { push @where, 'column3 = ?'; push @values, $var3; } $sql = $sql . ' where ' . join(' and ', @where); my $sth = $dbh->prepare_cached($sql); $sth->execute(@values);
    or
    my @values = (undef, $var1, $var2, $var3); my @where; my $sql = 'select * from table'; my @defined_values; foreach my idx (1..3) { if defined $values[$idx] { push @where, qq(column$dx = ?); push @defined_values, $values[$idx]; } } $sql = $sql . ' where ' . join(' and ', @where); my $sth = $dbh->prepare_cached($sql); $sth->execute(@defined_values);

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://790065]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (10)
As of 2014-04-17 08:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (441 votes), past polls