J'ai une instruction SQL similaire à celle indiquée ci-dessous dans Perl: Le $ A est un texte libre qui peut contenir tout ce qui peut contenir des guillemets simples, des guillemets doubles, de l'arrière-plan. Personnages Slash, etc. P> Comment ces personnages peuvent-ils être échappés pour que l'instruction SQL fonctionne? P> Merci. P> P>
4 Réponses :
Vous pouvez utiliser la méthode mieux encore, la meilleure pratique consiste à utiliser des valeurs liées : P> -> ciote code> (en supposant que vous utilisez dibi):
my $sth = $dbh->prepare("DBName..ProcName ?,? ");
$sth->execute($a, $b);
Je suis désolé de ne pas être clair. Je fais un appel à une procédure stockée. L'exemple aurait dû être quelque chose comme ci-dessous: mon $ SQL = "dbname..procname '$ a', '$ b'";
L'utilisation des paramètres de liaison doit toujours fonctionner pour les appels de procédure stockés.
Et au cas où il n'est pas évident, si vous utilisez des paramètres de liaison et que vous avez échappé manuellement des guillemets simples sur vos valeurs avant d'exécuter l'insertion, la valeur de la colonne se retrouvera avec deux guillemets simples séquentiels pour chaque devis.
Utilisez une déclaration préparée. Remplacer la variable avec A?. Pour bercer un exemple de Mangages DBI:
$sql = 'SELECT * FROM people WHERE lastname = ?'; $sth = $dbh->prepare($sql); $sth->execute($user_input_here);
Je suis désolé de ne pas être clair. Je fais un appel à une procédure stockée. L'exemple aurait dû être quelque chose comme ci-dessous: mon $ SQL = "dbname..procname '$ a', '$ b'";
Si vous utilisez des paramètres de requête, vous n'avez pas à échapper au contenu des chaînes.
my $sql="DBName..ProcName ?, ?"; $sth = $dbh->prepare($sql); $sth->execute($a, $b);
Si vous ne voulez pas utiliser -> Citation (pour une raison quelconque (pour une raison quelconque, cette fonction ne fonctionne pas sur ma version de DBI), essayez ceci:
$query=~s/\"/\\\"/g;
$ A code> et
$ B code> avoir une signification particulière liée à la fonction code> de tri code>. Ce n'est généralement pas une bonne idée de les utiliser. Sauf comme court nom de variable dans un échantillon de code.
Autre que la balise [Perl], dup de meilleur moyen d'arrêter l'injection SQL dans PHP . La seule différence pratique réside dans les échantillons de code. En outre, dup de Quel est le meilleur moyen d'éviter les attaques d'injection SQL? .