[英]mysqlite, inserting data and special character cases in perl
我在我的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>";
}
使用占位符並綁定值 。 這也將使您的程序免受SQL注入的侵害。
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);
確保該語句具有正確的占位符數量。
您需要調用一個函數以“轉義”值。 如何執行取決於您實際使用的數據庫-MySQL和SQLite是不同的產品。
另外,您應該在INSERT語句中顯式命名列:
INSERT INTO Table (Col1, Col2) VALUES (Val1, Val2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.