簡體   English   中英

用於SQL查詢的Perl串聯

[英]Perl concatenation for SQL query

我正在嘗試使用Perl將CSV文件的內容傳輸到PostgreSQL中的表中。

我能夠成功更新我的表,但是終端返回一個錯誤:

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])") ;

如果需要更多信息,請詢問他們。 對不起,英語不好。

-托馬斯

使用占位符,

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]);
}

我的猜測是您的錯誤是由於未在插入中指定列名,而同時具有錯誤的編號/類型的列引起的。 我希望以下Perl代碼不會出錯:

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

這是一個工作查詢可能看起來像:

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

通常,在插入時不包括列名是不明智的做法,因為即使正確使用它,以后也很容易中斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM