2010-11-25 21 views
0

J'ai un système d'enregistrement qui demande un nom d'utilisateur. Certaines personnes ont une apostrophe dans leur nom de famille et cela empêche les données d'être écrites dans la table de base de données MySQL (par exemple O'Hare). J'utilise mysql_real_escape_string qui supprime l'apostrophe de la chaîne. Ce serait bien, sauf que j'ai besoin d'utiliser la valeur avec l'apostrophe par rapport à un service Web, sinon le service Web retournera false.Comment empêcher l'apostrophe d'être supprimée PHP MySQL

Je pensais que je pourrais faire la vérification du nom avec le Web Service avant d'utiliser mysql_real_escape_string, mais cela pourrait-il présenter un défaut de sécurité? Ou les services Web SOAP font-ils déjà leurs propres vérifications pour les intrants propres?

Ou existe-t-il un meilleur moyen de passer à travers la variable par laquelle PHP conserve l'apostrophe mais la maintient en sécurité et MySQL peut l'accepter?

+1

C'est ... * le retirer *? *Sérieusement*? –

Répondre

7

Vous devriez nous montrer du code, car mysql_real_escape_string ne supprimera pas une apostrophe, mais seulement leur échapper.
Echapper moyens O'Hare deviendra O\'Hare de sorte qu'il peut être inséré comme une chaîne: 'O\'Hare'. Lors de la récupération de la base de données, votre valeur doit toujours être l'original O'Hare. Donc, si l'apostrophe est 'perdue', il y a probablement une erreur ailleurs dans la logique de votre programme.

L'autre option consiste à passer de l'utilisation de la bibliothèque MySQL à la bibliothèque MySQLi ou PDO pour accéder à votre base de données. Les deux derniers soutiennent les déclarations préparées. Les instructions préparées sont généralement considérées comme la meilleure pratique pour interroger votre base de données.

+0

Pourquoi la downvote? – Jacco

+0

+1; @Jacco: parce que c'est un site * niiiiiice * ... –

+1

+1 pour pointer les gens vers PDO. Sérieusement, le vieux mysql lib est tellement 90s: D –

0

mysql_real_escape_string() ne supprime pas les apostrophes.

Votre problème est probablement du côté de la sortie ou d'une autre fonction affectant l'entrée.

0

Vous devez avoir une connexion de base de données ouverte avant d'utiliser mysql_real_escape_string ou un dysfonctionnement.