[英]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.