我有perl
DBI
mysql
个查询,如下所示:
my $rows = get_rows(
"select id from table where column1=?, column2=? and column3=?",
$var1,$var2,$var3
);
sub get_rows {
my $sql = shift;
my @vars = @_;
my $sth = $dbh->prepare($sql);
$sth->execute(@vars);
my $rows = $sth->fetchall_arrayref();
$sth->finish();
return $rows;
}
我正在运行它以检查是否存在包含这些变量的特定行。然而,我遇到的问题是处理NULL值。必须将这些选择为IS NULL
而不是=?
,这通常会错过包含NULL值的行。例如,如果第1代,第2版和第3代包含'12'
,'23'
和undef
以及table
包含12
,23
和{{1然后查询不返回任何结果。有没有一种简单的方法可以使用NULL
将undef值转换为IS NULL
值?
答案 0 :(得分:2)
这在 NULL值 下的DBI中有记录。
$sql_clause = defined $age? "age = ?" : "age IS NULL";
$sth = $dbh->prepare(qq{
SELECT fullname FROM people WHERE $sql_clause
});
$sth->execute(defined $age ? $age : ());