2011-01-03 9 views
0

私はsqliteデータベースにperlからデータを挿入しています。ここmysqlite、データと特殊文字のケースを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>"; 
} 
+1

これはMySQLかSQLiteですか? –

+0

これはsqliteですが、違いがありますか? – Gordon

答えて

8

使用placeholders and bind values。これはあなたのプログラムをSQLインジェクションから安全に保ちます。

my $statement = $dbh->prepare("insert into $table VALUES(NULL, ?,?,?,?)"); 
$statement->execute(@DATA); 

@DATAの要素数は、実行時にのみ知られていると仮定すると(それは$tableための要素の正しい数であること)、あなたは確認すること

my $statement = $dbh->prepare("insert into $table VALUES(NULL" . ",?"[email protected] . ")"; 
$statement->execute(@DATA); 

を使用することができますそのステートメントに正しい数のプレースホルダーがあることを確認します。

+0

素晴らしいです!どうもありがとう – Gordon

-1

値をエスケープする関数を呼び出す必要があります。どのようにするかは、実際に使用しているデータベースによって異なります.MySQLとSQLiteは異なる製品です。

また、明示的にINSERT文で列に名前を付ける必要があります。

INSERT INTO Table (Col1, Col2) VALUES (Val1, Val2)