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

StackOverflow https://stackoverflow.com/questions/2207654

Вопрос

Может ли кто-нибудь сказать мне, есть ли функция, которая работает так же, как PHP? mysql_real_escape_string() для Perl из ДБИ модуль?

Это было полезно?

Решение

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

Другие советы

Не.Побег.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 (его нужно подготовить только один раз), и не менее эффективно, если вы этого не делаете (если вы не вызываете метод подготовки явно, он все равно получает вызывается неявно перед выполнением запроса).

Нравиться цитировать?

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

От 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

Метод обработки базы данных "quote"

my $dbh = DBI->connect( ... );
$sql = sprintf "SELECT foo FROM bar WHERE baz = %s",
          $dbh->quote("Don't");

http://metacpan.org/pod/DBI#quote

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top