Pergunta

Poderia alguns me dizer se existe uma função que funciona da mesma forma do PHP mysql_real_escape_string() para Perl do DBI módulo?

Foi útil?

Solução

Você deve usar espaços reservados e se ligam valores .

Outras dicas

Não faça isso. Escapar. SQL.

Não faça isso. Citar. SQL.

espaços reservados Use SQL / parâmetros (?). A estrutura da instrução SQL e os valores dos dados representados pelos códigos são enviados para o banco de dados completamente separadamente, para que (com exceção de um bug no mecanismo de banco de dados ou o módulo DBD) não há absolutamente nenhuma maneira que os valores de dados podem ser interpretados como SQL comandos.

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

Como um benefício de lado, usando marcadores de posição também é mais eficiente se você reutilizar a instrução SQL (ele só precisa ser preparada uma vez) e não menos eficiente se você não fizer isso (se você não chamá preparar explicitamente, ele ainda é chamado implicitamente antes da consulta é executado).

Como Citação ?

Eu também recomendo a leitura da documentação para DBD :: MySQL se estão preocupados com utf8.

A partir 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

Handle banco de dados Método de "quote"

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top