9
votes

Y a-t-il un équivalent de psql_real_escape_string de PHP () pour DBI de Perl?

Peut-être que certains me disent s'il y a une fonction qui fonctionne la même chose que PHP's mysql_real_escapape_string () pour Perl du DBI Module?


0 commentaires

5 Réponses :


2
votes

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


1 commentaires

C'est l'article de Randal Schwartz "en évitant les attaques d'injection SQL". Joli.



5
votes

Comme citation ?

Je recommanderais également de lire la documentation de DBD :: MySQL Si vous sont inquiets pour UTF8.


0 commentaires

16
votes

1 commentaires

DBH-> BIND () est l'équivalent direct, mais comme Sinan dit, ne le faites pas. Faites-le correctement avec des espaces réservés et des valeurs de liaison.



9
votes

pas. Échapper. SQL.

NE PAS. Citation. SQL.

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

comme une prestation latérale, l'utilisation d'espaces loués est également plus efficace si vous réutilisez votre instruction SQL (il suffit de préparation une fois) et non moins efficace si Vous ne le faites pas (si vous n'appelez pas votre préparation explicitement, il est toujours appelé implicitement avant que la requête soit exécutée).


2 commentaires

Les espaces réservés ne peuvent pas être utilisés pour dans ('a', 'B', 'c') clauses où les valeurs résultent de la logique commerciale. Ici, j'ai besoin d'échapper aux valeurs moi-même. Serait fantastique de pouvoir écrire: ... où id in? , -> EXECUTE (\ @ SIONIDS) Mais ce n'est pas possible ...


@ Peterv.mørch true, vous ne pouvez pas dire id dans? , mais vous peut dire 'id in ('. Joindre (''. ? ') x @ Quelques personnes).') ' Pour créer de manière dynamique une requête avec le bon nombre d'espaces réservés pour vos données.



0
votes

Méthode de la poitrine de base de données "Devis" xxx

http: // METACPAN .ORG / POD / DBI # Devise


0 commentaires