1

一連の値のプレースホルダーを使用して sql LIKE 修飾子を実装しようとしています。次のように、特定の値に対してそれを行う方法を知っています。

use strict;
use DBI;
my $dbh = DBI->connect("dbi:Sybase:server=$Srv;database=$Db", "$user", "$passwd") or die "could not connect to database";
my $query = "Select key, first_name from names where last_name like ? ";
my $sth = $dbh->prepare( $query ) or die "could not prepare statement\n", $dbh->errstr;
$sth->bind_param(1, "Mar%") or die "Could not bind_param", $sth->errstr ;
$sth->execute or die "Could not execute $query", $sth->errstr;
while (my @result = $sth->fetchrow_array){
print "@result\n";
}

array に存在する値のセットに対して上記のコードを実装するように変更しようとすると、@l_names結果が得られません。私は次のようにしています:

use strict;
use DBI;
open (FH, "/home/usr/file") or die $!;
my @l_names= <FH>; 
close(FH);

my $dbh = DBI->connect("dbi:Sybase:server=$Srv;database=$Db", "$user", "$passwd") or die "could not connect to database";
my $query = "Select key, first_name from names where last_name like ? ";
my $sth = $dbh->prepare( $query ) or die "could not prepare statement\n", $dbh->errstr;
foreach my $l_name (@l_names){
    $sth->bind_param(1, "$l_name%") or die "Could not bind_param", $sth->errstr ;
    $sth->execute or die "Could not execute $query", $sth->errstr;
}
while (my @result = $sth->fetchrow_array){
    print "@result\n";
}

何がうまくいかないのか、それを修正する方法について何か提案はありますか? ありがとう!

4

1 に答える 1

4

ファイルから読み取った行からEOLマーカーを削除していません。修正方法は次のとおりです。

my @l_names = <FH>; 
chomp(@l_names);

アップデート:

「PerlのDBIモジュールの配列からパラメーターを使用して複数の行を選択するにはどうすればよいですか?」も参照できます。質問

于 2009-12-07T17:20:39.603 に答える