SQL查询的Perl连接
我正在尝试使用Perl将CSV文件的内容传输到PostgreSQL中的表中 我能够成功更新我的表,但终端返回错误:SQL查询的Perl连接,sql,postgresql,perl,Sql,Postgresql,Perl,我正在尝试使用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 I
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;$ido(“插入到测试值中(“$LastName[$i]”,“$Street[$i]”,$Balance_account[$i]));
如果需要更多信息,请询问他们。
对不起,英语不好
--
Thomas我猜您的错误是由于在insert中没有指定列名,同时列的数量/类型错误造成的。我希望以下Perl代码不会出错:
for (my $i=0 ; $i<=50; $i++){
$dbh -> do("INSERT INTO test (lastname, street, balance) 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$i=0;$ido(“插入测试值(?,,?)”,
未定义,
$LastName[$i],$Street[$i],$Balance\u账户[$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]);
}
my$sth=$dbh->prepare('INSERT INTO test VALUES(?,?));
对于(我的$i=0;$iexecute($LastName[$i],$Street[$i],$Balance_账户[$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]);
}