web-dev-qa-db-fra.com

Comment échapper à l'apostrophe (') dans MySql?

Le documentation MySQL indique qu'il devrait s'agir de \'. Cependant, scite et mysql montre que '' fonctionne. J'ai vu ça et ça marche. Que devrais-je faire?

127
user4951

La documentation MySQL que vous citez en dit un peu plus que ce que vous mentionnez. Il dit aussi

Un "'" à l'intérieur d'une chaîne précédée de "'" peut être écrit sous la forme "''".

(Vous avez également établi un lien avec version de MySQL 5.0 du tableau 8.1. Séquences d'échappement des caractères spéciaux , et la version actuelle est 5.6 - mais le courant Tableau 8.1. Séquences d'échappement des caractères spéciaux est assez similaire.)

Je pense que le note Postgres sur le paramètre backslash_quote (string) est informatif:

Ceci contrôle si un guillemet peut être représenté par \' dans un littéral de chaîne. La méthode standard recommandée par SQL pour représenter un guillemet consiste à le doubler (''), mais PostgreSQL ™ a également accepté historiquement \'. Cependant, l'utilisation de \' crée des risques de sécurité ...

Cela me dit que l’utilisation d’un caractère à guillemets doublés est un meilleur choix global et à long terme que l’utilisation d’une barre oblique inversée pour échapper à la guillemets simples.

Maintenant, si vous souhaitez également ajouter le choix du langage, le choix de la base de données SQL et ses particularités non standard, ainsi que le choix du cadre de requête pour l'équation, vous risquez de vous retrouver avec un choix différent. Vous ne donnez pas beaucoup d'informations sur vos contraintes.

164
Jim DeLaHunt

Le SQL standard utilise des guillemets doubles; MySQL doit accepter cela pour être raisonnablement conforme.

'He said, "Don''t!"'
35
Jonathan Leffler

Ce que je crois que user2087510 voulait dire, c'est:

name = 'something'
name = name.replace("'", "\\'")

J'ai aussi utilisé cela avec succès.

8
user3169788

écrivez simplement '' à la place de ' je veux dire deux fois '

6
MRRaja

Il y a trois façons dont je suis au courant. Le premier n'étant pas le plus joli et le second étant la méthode courante dans la plupart des langages de programmation:

  1. Utilisez une autre citation: 'I mustn''t sin!'
  2. Utilisez le caractère d'échappement \ avant le simple quote': 'I mustn\'t sin!'
  3. Utilisez des guillemets doubles pour entourer une chaîne au lieu de guillemets simples: "I mustn't sin!"
3
Robert Rocha

Voici un exemple:

SELECT * FROM pubs WHERE name LIKE "%John's%"

Utilisez simplement des guillemets doubles pour joindre la citation simple.

Si vous insistez pour utiliser des guillemets simples (et la nécessité d'échapper au caractère):

SELECT * FROM pubs WHERE name LIKE '%John\'s%'
3
Overkillica

Dans PHP j'aime utiliser mysqli_real_escape_string (), qui échappe aux caractères spéciaux d'une chaîne pour les utiliser dans une instruction SQL.

voir https://www.php.net/manual/en/mysqli.real-escape-string.php

0
will

Je pense que si vous avez un point de données avec une apostrophe, vous pouvez ajouter une apostrophe avant l'apostrophe

par exemple. 'C'est chez John'

Ici, MYSQL suppose deux phrases 'This is John' 'place'

Vous pouvez mettre "Ceci est la place de John". Je pense que cela devrait fonctionner ainsi.

0
Priyanka Pandhi