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 () code>
pour Perl du DBI A > Module? P>
5 Réponses :
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
C'est l'article de Randal Schwartz "en évitant les attaques d'injection SQL". Joli.
Comme citation ? P>
Je recommanderais également de lire la documentation de DBD :: MySQL Si vous sont inquiets pour UTF8. P>
Vous devez utiliser Valeurs d'accès et valeurs de liaison . P>
DBH-> BIND () CODE> 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.
pas. Échapper. SQL.
NE PAS. Citation. SQL. P>
Utilisez des paramètres / paramètres SQL ( 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). P> P> ? Code>). 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. p>
Les espaces réservés ne peuvent pas être utilisés pour dans ('a', 'B', 'c') code> 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? Code>,
-> EXECUTE (\ @ SIONIDS) CODE> Mais ce n'est pas possible ...
@ Peterv.mørch true, vous ne pouvez pas dire id dans? Code>, mais vous peut i> dire
'id in ('. Joindre (''. ? ') x @ Quelques personnes).') ' code> Pour créer de manière dynamique une requête avec le bon nombre d'espaces réservés pour vos données.
Méthode de la poitrine de base de données "Devis"