1

単一のクエリを使用して、同じフィールドに複数の値を挿入しようとしています。次のコードに間違いはありますか?

my $dbh =  DBI->connect("DBI:mysql:accounting:localhost", 'username', 'password',
      {RaiseError => 1});
my @id = [1,18,976,90];
my @name = ['ss','dc','ws','rd'];
my @data = ([@id],[@name]);
my $ab = $dbh->prepare("insert into table (id,name) values (?,?)";);
for my $datam (@data) {
  $ab->execute(@$datam);
}
$ab->finish();

次のエラーが発生します:DBI::st=HASH(0*a16f774)prepareステートメントの場合。これを引き起こしている可能性がありますか?

4

2 に答える 2

6

あなたが実際にエラーを出さなかったのであなたの質問に本当に答えることはできません、しかし私はあなたのコードに問題を見つけました。あなたはやっている

$ab->execute([1,18,976,90]);
$ab->execute(['ss','dc','ws','rd']);

明らかにやりたいとき

$ab->execute(  1, 'ss');
$ab->execute( 18, 'dc');
$ab->execute(976, 'ws');
$ab->execute( 90, 'rd');

修理:

my @id = (1,18,976,90);
my @name = ('ss','dc','ws','rd');

for my $i (0..$#id) {
   $ab->execute($id[$i], $name[$i]);
}
于 2012-09-18T05:15:38.213 に答える
3

私はあなたの構造に気づきました:

my @id = [1, 18, 976, 90];

は、配列参照である1つの要素を持つ配列です。モジュールごとに変数の構造を確認できますData::Dumper。したがって、必要なのは単純な配列だけです。

my @id = (1, 18, 976, 90);

Data::Dumperの使用

use Data::Dumper;
print Dumper( \@id );

$VAR1 = [
      [
        1,
        18,
        976,
        90
      ]
    ];

解決

use List::MoreUtils qw(each_array);

my @id   = (1, 18, 976, 90);
my @name = ('ss', 'dc', 'ws', 'rd');

my $data = each_array(@id, @name);

...
while (my ($id, $name) = $data->()) {

    $ab->execute($id, $name);
}   
于 2012-09-18T05:18:16.027 に答える