2016-02-05 29 views
0

我有一个perlDBImysql查询,看起来像这样:Perl的DBI哪里是空与未定义的变量

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'undeftable包含12,23NULL,则查询将不返回任何结果。有没有简单的方法来将012f的undef值转换为IS NULL值?

+2

您的整个'get_rows'函数可以被DBI的'selectall_hashref'方法取代。 – simbabque

+2

@simbabque,你的意思是'selectall_arrayref'。 – cjm

+0

@cjm当然是。 – simbabque

回答

2

这记录在DBINULL值

$sql_clause = defined $age? "age = ?" : "age IS NULL"; 
$sth = $dbh->prepare(qq{ 
    SELECT fullname FROM people WHERE $sql_clause 
}); 
$sth->execute(defined $age ? $age :()); 
+0

谢谢。没有看到这个。我最终修改了查询而不是代码,就像DBI文档中的建议之一一样。 – D2J2