my $sql= <<'SQL'; select * from mytable -- ignore or value where (? or coln1=?) and (? or coln2=?) and (? or coln3=?) SQL my $sth= $dbh->prepare( $sql ); my %parameters= (coln2 => 'Hello'); my @parameters; for my $column (qw(coln1 coln2 coln3) { if( exists $parameters{ $column }) { # Use this column value push @parameters, 0, $parameters{ $column }; } else { # Ignore this column value push @parameters, 1, undef; }; }; $sth->execute(@parameters);