2017-03-08 7 views
1

私は、Perlを使用してPostgreSQLのテーブルにCSVファイルの内容を転送しようとしています。SQLクエリのPerl連結

私は成功した私のテーブルを更新できるんだけど、端末がエラーを返します。ここでは

Use of uninitialized value in concatenation (.) or string 
Syntax error near "," 
INSERT INTO test VALUES (, '', '', '', '',,) 

は、それが失敗したコードです:

for (my $i=0 ; $i<=50; $i++){ 
$dbh ->do("INSERT INTO test VALUES ('$LastName[$i]', '$Street[$i]', $Balance_account[$i])") ; 

より多くの情報がちょうど頼む必要がある場合それら。 悪い英語を申し訳ありません。

- トーマス

答えて

0

私の推測では、あなたのエラーが同時に列の誤った数/タイプを持ちながら、あなたの挿入に列名を指定しないことによって引き起こされているということです。私はエラーではありませんし、次のPerlコードを期待する:それは、一般的に行っている間、列名が含まれないように悪い習慣と考えられている

INSERT INTO test (lastname, street, balance) 
VALUES 
    ('Skeet', '100 Thatcher Street', 100.50); 

for (my $i=0 ; $i<=50; $i++){ 
$dbh -> do("INSERT INTO test (lastname, street, balance) VALUES ('$LastName[$i]', '$Street[$i]', $Balance_account[$i])"); 

をここでの作業クエリがどのようなものであるかであります挿入してください。正しい場合でも、後で簡単に破損する可能性があります。

3

使用プレースホルダ、理想的

for (my $i=0 ; $i<=50; $i++){ 
    $dbh->do("INSERT INTO test VALUES (?,?,?)", 
    undef, 
    $LastName[$i], $Street[$i], $Balance_account[$i] 
); 
} 

、クエリを準備し、このような各値のセット、何かを実行する必要があります:

my $sth = $dbh->prepare('INSERT INTO test VALUES (?,?,?)'); 

for (my $i=0 ; $i<=50; $i++){ 
    $sth->execute($LastName[$i], $Street[$i], $Balance_account[$i]); 
}