我在我的sqlite数据库中插入来自perl的数据。
这是我的编码:
如果我的值包含引号等特殊字符,我该如何使这个案例有用?
sub ADDROWDATATODATABASE
{
my $dbh1 = $_[0];
my $table = $_[1];
my @DATA = @{$_[2]};
my $string = ();
foreach (@DATA) { $string .= "'$_',"; } $string =~ s/,$//;
$dbh1->do(qq|insert into $table values(NULL,$string);|);
my $date = `date`;
print "[MYSQLITE_ADDROW.pl] $date : ADDING DATA INTO DATABASE <p>";
}
答案 0 :(得分:8)
使用placeholders and bind values。这样也可以使您的程序更安全。
my $statement = $dbh->prepare("insert into $table VALUES(NULL, ?,?,?,?)");
$statement->execute(@DATA);
假设@DATA
中的元素数量仅在运行时已知(并且它是$table
的元素数量正确),您可以使用
my $statement = $dbh->prepare("insert into $table VALUES(NULL" . ",?"x@DATA . ")";
$statement->execute(@DATA);
确保该陈述具有正确数量的占位符。
答案 1 :(得分:-1)
您需要调用函数来“转义”值。你如何做到这一点取决于你实际使用的数据库--MySQL和SQLite是不同的产品。
此外,您应该在INSERT语句中明确命名列:
INSERT INTO Table (Col1, Col2) VALUES (Val1, Val2)