0

我有这个代码:

    my (@matches, @vars);  

    if ($date_to) {
            push(@matches, q{ m.mentioned_at <= ? });
            push(@vars, $date_to);
        }

        if ($person) {
            push(@matches, q{ t.name like ? });
            push(@vars, $person);
        }
    if ($show) {
            push(@matches, q{ t.name like ? });
            push(@vars, $show);
        }  
    if (@vars){
        my $where = join (' and ', @matches);
        $where = qq{where $where} if @matches  
        $res = $db->do({ page => $.p, per_page => $.s }, q{
                      select m.id, m.body, m.link,
                      count(distinct(m.id)) as num_items
                      from mentions m
                      $where 
                      group by m.id, m.body, m.link,
                      order by m.created_at desc
               }, @vars );
     }   

     print STDERR Dumper ($where);    
     $VAR1 = 'where  m.mentioned_at <= ?  and  t.name like ? ';`  
     print STDERR Dumper (@vars);   
     $VAR1 = '2012/06/01';  
     $VAR2 = 'Adby Phil';`  

为什么我有这个错误:

called with 2 bind variables when 0 are needed  
Can't use an undefined value as an ARRAY reference 

似乎它没有看到 $where 子句。

4

1 回答 1

3

我认为您已经do()切换了参数的顺序:

$rv  = $dbh->do($statement, \%attr, @bind_values);

看起来你首先有 \%attr,然后是 $statement。

另外,请注意它do()不会返回语句句柄,因此您无法获取数据。您可能需要更传统的准备和执行序列。

于 2012-08-22T14:38:35.630 回答