Perl DBI,其中IS NULL带有未定义的变量

时间:2016-02-05 10:49:18

标签: mysql perl dbi

我有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包含1223和{{1然后查询不返回任何结果。有没有一种简单的方法可以使用NULL将undef值转换为IS NULL值?

1 个答案:

答案 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 : ());