0

When I use the following code, I only seem to print the last results from my array. I think it has something to do with my like clause and the % sign. Any ideas?

my @keywords = <IN>;
my @number = <IN2>;

foreach my $keywords (@keywords)
{
  chomp $keywords;

  my $query = "select *
    from table1 a, table2 b
    where a.offer = b.offer
    and a.number not in (@number)
    and a.title like ('%$keywords%')";

  print $query."\n";

  my $sth = $dbh->prepare($query)
    or die ("Error: Could not prepare sql statement on $server : $sth\n" .
            "Error: $DBI::errstr\n");

   $sth->execute
     or die ("Error: Could not execute sql statement on $server : $sth\n" .
             "Error: $DBI::errstr\n");

  while (my @results = $sth->fetchrow_array())
  {
    print OUT "$results[0]\t$results[1]\t$results[2]\t$results[3]\t",
              "$results[4]\t$results[5]\t$results[6]\t$results[7]\t",
              "$results[8]\n";          
  }
}

close (OUT);
4

2 回答 2

1

我猜你的IN文件是在 Windows 系统上创建的,所以在行\r\n之间有 CRLF 序列(大致),但是你在 *nix 系统(或 Cygwin 或诸如此类)上运行此脚本。所以这一行:

    chomp $keywords;

将删除尾随\n,但不会删除\r它之前的。因此,您的表达式中有一个杂散的回车LIKE,并且没有行匹配它。

如果我的猜测是正确的,那么您可以通过将上面的行更改为:

    $keywords =~ s/\r?\n?\z//;

从行尾删除任何回车和/或换行符。

(您还应该进行上述 innaM 建议的更改,使用绑定变量而不是将值直接插入到查询中。但该更改与此更改是正交的。)

于 2013-07-04T18:05:26.297 回答
0

显示的输出,print $query也许我们可以帮助你。更好的是,显示以下输出:

use Data::Dumper;
$Data::Dumper::Useqq=1;
print Dumper($query);

在那之前,您关于“替换和”的评论让我认为您的输入有回车,如果有多个,@number 的使用不太可能起作用。

于 2013-07-04T18:02:09.630 回答