Существует ли эквивалент mysql_real_escape_string PHP () для DBI Perl?

Могли некоторые говорить мне, если существует функция, которая работает то же PHP's mysql_real_escape_string() для Perl от модуля DBI?

8
задан Sinan Ünür 5 February 2010 в 15:10
поделиться

4 ответа

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

16
ответ дан 5 December 2019 в 05:18
поделиться

Как quote?

Я также рекомендую прочитать документацию к DBD::MySQL, если вас беспокоит utf8.

5
ответ дан 5 December 2019 в 05:18
поделиться

Не надо. Побег. SQL.

Не надо. Цитировать. SQL.

Используйте заполнители / параметры SQL (? ). Структура оператора SQL и значения данных, представленные заполнителями, отправляются в базу данных полностью отдельно, поэтому (исключая ошибку в ядре базы данных или модуле DBD) нет абсолютно никакого способа интерпретировать значения данных как SQL команды.

my $name = "Robert'); DROP TABLE Students; --";
my $sth = $dbh->prepare('SELECT id, age FROM Students WHERE name = ?');
$sth->execute($name);  # Finds Little Bobby Tables without harming the db

В качестве дополнительного преимущества использование заполнителей также более эффективно, если вы повторно используете свой оператор SQL (его нужно подготовить только один раз), и не менее эффективно, если вы этого не сделаете (если вы не вызываете команду prepare явно, он по-прежнему вызывается неявно перед выполнением запроса).

9
ответ дан 5 December 2019 в 05:18
поделиться

Из http://www.stonehenge.com/merlyn/UnixReview/col58.html :

  use SQL::Abstract;
  ... 
  my $sqa = SQL::Abstract->new;
  my ($owner, $account_type) = @_; # from inputs
  my ($sql, @bind) = $sqa->select('account_data', # table
                                  [qw(account_id balance)], # fields
                                  {
                                    account_owner => $owner,
                                    account_type => $account_type
                                  }, # "where"
                                 );
  my $sth = $dbh->prepare_cached($sql); # reuse SQL if we can
  $sth->execute(@bind); # execute it for this query
2
ответ дан 5 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: