mysqlite, вставка данных и специальных символов в Perl - PullRequest
0 голосов
/ 04 января 2011

Я вставляю данные из perl в мою базу данных sqlite.

вот мое кодирование:

как мне заставить этот случай работать, если мои значения имеют специальные символы, такие как кавычки?

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 ]

8 голосов
/ 04 января 2011

Использовать заполнители и значения связывания . Это также защитит вашу программу от внедрения 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);

чтобы убедиться, что в заявлении указано правильное количество заполнителей.

0 голосов
/ 04 января 2011

Вам нужно вызвать функцию, чтобы "экранировать" значения. То, как вы это сделаете, зависит от того, какую базу данных вы на самом деле используете - MySQL и SQLite - это разные продукты.

Кроме того, вы должны явно назвать столбцы в операторе INSERT:

INSERT INTO Table (Col1, Col2) VALUES (Val1, Val2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...