如何在Perl的DBI中使用绑定查询选择空行?

Pau*_*lin 6 sql perl dbi

我希望能够将某些内容传递给SQL查询,以确定是否只选择某个列为null的那些查询.如果我只是构建一个查询字符串而不是使用绑定变量,我会做类似的事情:

if ($search_undeleted_only)
{
    $sqlString .= " AND deleted_on IS NULL";
}
Run Code Online (Sandbox Code Playgroud)

但我想使用绑定查询.这会是最好的方式吗?

my $stmt = $dbh->prepare(...
    "AND (? = 0 OR deleted_on IS NULL) ");
$stmt->execute($search_undeleted_only);
Run Code Online (Sandbox Code Playgroud)

Squ*_*Cog 4

是的; 一个相关的技巧是,如果您有 X 个潜在的过滤器(其中一些是可选的),就是让模板 say " AND ( ?=-1 OR some_field = ? ) ",并创建一个特殊的函数来包装执行调用并绑定所有第二个 ? 。(在本例中,-1 是一个特殊值,表示“忽略此过滤器”)。

Paul Tomblin 的更新:我编辑了答案以包含评论中的建议。