>Сколько ничитал все не пойму как правильно составить запрос...
>select * from tablename where ulica='$ulica' and dom='$dom';
>Что должно стоять на месте $dom, просто эта переменная нужна, но не
>всегда,иногда она должна быть пустой,точнее что бы выбор от нее не
>зависел.
>я встречал такое:
>select * from tablename where ulica='$ulica' and dom=?;
>типа должна выбирать улицу с любым домом,но неработает.
my %data=(ulica=>$ulica,dom=>$dom); # collect fieldnames and values
my @vals,@fields;
map{ # filter out the right field-value pars
if ($data{$_}){ # if a value is not a 0 or an empty string
push @vals,$data{$_};
push @fields,$_."=?"; # add a placeholder
}
}keys %data;
my $sql="select * from tablename where ".join(" and ",@fields); # concatenation of filtered fields
$dbh = DBI->connect($data_source, $username, $auth, \%attr); # for that example only
my $sth = $dbh->prepare($sql) || die $dbh->errstr;
$sth->execute(@vals) or die $dbh->errstr;
# Important: please, always do `->execute(@vals)' and not $sql="...ulica='${ulica}'..."
# It is a great thing of DBI to improve security against sql injections in that way, you should realy use it!