Question

Aurait-on me dire s'il y a une fonction qui fonctionne de la même que celle de PHP mysql_real_escape_string() pour Perl à partir du module DBI ?

Était-ce utile?

La solution

Autres conseils

Ne pas. Échapper. SQL.

Ne pas. Citation. SQL.

Utilisez SQL espaces réservés / paramètres (?). La structure de l'instruction SQL et les valeurs de données représentées par les espaces réservés sont envoyés à la base de données complètement séparément, de sorte (à moins d'un bogue dans le moteur de base de données ou le module DBD) il n'y a absolument aucune façon que les valeurs de données peuvent être interprétées comme SQL les commandes.

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

Comme un avantage côté, en utilisant des espaces réservés est plus efficace si vous réutilisez votre instruction SQL (il ne doit être préparé une fois) et pas moins efficace si vous ne le faites pas (si vous ne préparez appelez pas explicitement, il obtient encore appelé implicitement avant que la requête est exécutée).

Comme citation ?

Je recommande également la lecture de la documentation DBD :: MySQL si vous sont inquiets au sujet UTF8.

De 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

Base de données Méthode de poignée "citation"

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top