sqlite,在perl中插入数据和特殊字符的情况

时间:2011-01-03 21:25:06

标签: mysql 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>";
}

2 个答案:

答案 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)