Mysql
 sql >> Base de données >  >> RDS >> Mysql

Lorsque j'échappe à toutes les entrées, il laisse parfois des barres obliques (\) dans la chaîne et l'insère dans la base de données. Pourquoi cela se produit-il et comment puis-je résoudre ce problème ?

Vous avez raison.
Les guillemets magiques n'ont rien à voir avec les trucs SQL et ne devraient pas y être connectés.
Parce que les guillemets magiques sont un problème à l'échelle du site et que l'échappement SQL est un problème uniquement lié à SQL.

Ainsi, ils ont besoin d'un traitement différent et ne doivent jamais être utilisés conjointement.

Vous devez vous débarrasser inconditionnellement des guillemets magiques, car cela gâche non seulement les éléments SQL, mais également toutes les manipulations de données de votre site.

Il serait donc sage de mettre du code stripslashes dans n'importe quel fichier d'amorçage à exécuter à chaque appel du script. Le code que vous pouvez trouver dans de nombreuses implémentations d'un tel code, juste google pour la fonction 'stripslashes_deep'.

Il serait sage que ce code soit toujours exécuté (bien sûr sous la condition vérifiant get_magic_quotes_gpc()) malgré l'état actuel des guillemets magiques, juste pour des raisons de compatibilité.

Mais il existe une autre possibilité pour les désactiver :essayez de créer un fichier php.ini à la racine de votre application.

Cependant, il y a une grave erreur dans votre code. En fait, cela ne protège rien.
Vous échappez $memberid et $postid mais ne les citez pas ! . Il n'y a donc aucune protection. Tout simplement parce que l'échappement ne fonctionne que lorsqu'il est utilisé avec des guillemets.

S'il vous plaît, rappelez-vous :

S'évader n'est pas synonyme de sécurité !

S'enfuir seul ne sert à rien. Il y a tout un ensemble de règles à suivre.

J'ai écrit une explication décente récemment, donc je ne me répéterais pas :Remplacement des fonctions mysql_* par PDO et des instructions préparées