Как связать значения INSERT INTO MySQL Perl - PullRequest
2 голосов
/ 05 марта 2012

У меня есть код ниже, который работает, но мне нужно знать, как связать их для безопасности. Если я просто заменю $ new_row на? и положить его в выполнение я получаю ошибку. Спасибо за вашу помощь.

foreach my $field (@account_field_order) {
$new_row .= "'" . param($field) . "', ";
}#foreach
$new_row .= "'$status'";
my $dsn = "DBI:mysql:$database";
my $dbh = DBI->connect($dsn, $MYSQLuserid, $MYSQLpassword ) 
          or die $DBI::errstr;
my $sth = $dbh->prepare(qq(INSERT INTO $table VALUES ($new_row) )) or die $DBI::errstr;
$sth->execute() or die $DBI::errstr;

Ответы [ 2 ]

5 голосов
/ 05 марта 2012

Вы захотите использовать заполнители, а никогда не будут интерполировать переменные в строках.Вам, вероятно, следует использовать taint mode и дезинфицировать ваши значения param перед их использованием, если безопасность важна для вас.Документация по заполнителям здесь .

Попробуйте что-то вроде:

my @values = map param($_), @account_field_order; # add values to array
push @values, $status;                  # for simplicity
$new_row = join ", ", ("?") x @values;  # add ? for each value

... # basically same code as before, except the execute statement:

$sth->execute(@values);      # arguments given will be inserted at placeholders
0 голосов
/ 05 марта 2012

Если ваши значения были в хэше, пример insert_hash в документах (в разделе prepare_cached). Отрегулируйте соответствующим образом, если не используете массив.

...