2010-08-26 8 views
2
$str = 'BEGIN This is a "quote" test. \'Single\' END'; 
echo $str . "\n"; 
echo mysql_real_escape_string($str); 

// Outputs: 
BEGIN This is a "quote" test. 'Single' END 
BEGIN This is a \"quote\" test. \'Single\' END 

Exécution de PHP 5.3.2 sur CentOS. Autant que je me souvienne, mysql_real_escape_string() n'échappera que des guillemets simples pour éviter les injections SQL. Les guillemets n'ont rien à voir avec ça, car " ne démarre pas ou ne termine pas un littéral de chaîne dans MySQL!Aujourd'hui, mysql_real_escape_string() échappe les guillemets simples et les guillemets

Cela provoque l'insertion de barres obliques inverses dans les données! Quelque chose que je ne veux clairement pas.

+1

Qu'est-ce qui a changé récemment? Une version PHP mise à jour? Autre chose? Il ne commencera pas juste à le faire sans cause? Est-ce qu'un paramètre dans php.ini a été modifié? –

+1

'mysql_real_escape_string' envoie la chaîne au serveur MySQL pour qu'il échappe aux données, puis renvoie ce qu'il vous renvoie. Aussi, MySQL dans son mode par défaut accepte à la fois '' '' et '' 'comme des délimiteurs de chaînes – Powerlord

Répondre

3

" démarre une chaîne dans MySQL. (Voir: Strings)

Exception:

Si le mode ANSI_QUOTES SQL est activée, les chaînes littérales peuvent être cités uniquement entre guillemets simples car une chaîne entre guillemets dans les doubles entre guillemets est interprété comme un identifiant .

+0

OK Je vois ça maintenant ... il semble que j'utilise addslashes() dans la fonction d'échappement de ma bibliothèque Mais si j'insère ceci dans la base de données, par exemple 'INSERT INTO myTable VALUES ('BEGIN Ceci est un \" quote \ "test. \' Single \ 'END')' la barre oblique inverse deviendra-t-elle juste '' 'ou le backslash être transporté avec elle dans les données? Cela signifie que lorsque je récupère les données, je devrais supprimer le backslash. –

+0

'\" 'sera converti en' "';;) – NikiC

+0

ok merci nikic J'ai eu peur pendant une seconde. quelque chose d'autre provoque alors des antislashs à insérer dans mes données. (Non ce n'est pas des citations magiques) –

0

Des sons comme des citations magiques ont été activés.

Ce message détaille votre problème avec les correctifs. http://www.sitepoint.com/forums/showthread.php?t=545824

+0

merci mais les citations magiques n'étaient pas activées. le problème était en fait que mon code échappait deux fois aux données (une fois dans une fonction locale et à nouveau dans une fonction de bibliothèque), ce qui entraînait '' 'devenant' \ "' puis devenant '\\" 'qui deviendrait' \ "' après insertion dans la base de données. La réponse acceptée a dissipé ma confusion. –

+0

bien, pour être juste, des citations supplémentaires est exactement ce que le problème était. Donc, même si je ne pouvais pas imaginer que votre code l'a fait ailleurs, j'ai diagnostiqué avec précision la cause, mais pas l'agent ;-) –

+0

ah, très vrai. J'espère que quelqu'un avec un problème similaire va chercher cette question et l'une de ses réponses et arriver à une solution:} –

Questions connexes