DBI从表中选择所有与子集数据

时间:2014-01-28 10:39:55

标签: perl dbi

如果定义了$ input:

,我有以下代码接受来自用户的输入

代码将选择所有具有field1 = $ input的数据,否则代码选择表中的所有数据

   if (defined $input) {

my $sth= $dbh->prepare("select field1,field2 from mytable where field1 = ?  ");
$sth->execute($value);}
    else {
    my $sth= $dbh->prepare("select field1,field2 from mytable");
$sth->execute();

  }

我有相同的代码重复,形成多个具有不同数据字段的表。

我想知道DBI是否有一个选项可以更加维护的方式将这两个查询合并到一个查询中?

2 个答案:

答案 0 :(得分:2)

这就是我通常的做法:

my (@where, @params);

if (defined $input) {
  push @where, 'field1=?';
  push @params, $input;
}

# push more clauses onto arrays as needed

my $sql="select field1,field2 from mytable";
if (@where) {
  $sql .= " WHERE ".join (' AND ',@where);
}

my $sth= $dbh->prepare($sql);
$sth->execute(@params);

这样做的好处是你可以根据需要添加任意数量的条款。

答案 1 :(得分:0)

你不能这样做:

select field1,field2 from mytable where ((? is null) or (field1 = ?))