191 votes

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

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

244voto

Jim DeLaHunt Points 3395

La documentation de MySQL que vous citez dit en réalité un peu plus que ce que vous mentionnez. Elle dit aussi:

Un "'" à l'intérieur d'une chaîne de cité "'" peut être écrit "''".

(Aussi, vous vous êtes liés à l' MySQL version 5.0 du Tableau 8.1. Caractère spécial des Séquences d'Échappement, et la version actuelle est de 5,6 - mais le Tableau 8.1. Le Caractère spécial de Séquences d'Échappement à l'air assez similaire).

Je pense que la Postgres note sur l' backslash_quote (string) paramètre est instructif:

Ce contrôle si un devis marque peut être représenté par \' dans une chaîne littérale. Le préféré, SQL standard de façon à représenter un devis marque est en doublant ('') mais PostgreSQL, historiquement, s'est également accepté \'. Cependant, l'utilisation de \' crée des risques de sécurité...

Qui me dit que l'utilisation d'un doublé unique caractère de guillemet est l'amélioration d'ensemble et à long terme de choix que d'utiliser une barre oblique inverse pour échapper à la simple citation.

Maintenant, si vous aussi vous souhaitez ajouter un choix de langue, choix de la base de données SQL et de sa non-standard bizarreries, et le choix de la requête cadre de l'équation, alors vous pourriez vous retrouver avec un choix différent. Vous ne donnez pas beaucoup d'informations à propos de vos contraintes.

56voto

Jonathan Leffler Points 299946

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

 'He said, "Don''t!"'
 

15voto

user3169788 Points 21

Ce que je pense que user2087510 voulait dire, c'était:

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

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

6voto

Overkillica Points 319

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%'
 

0voto

cyberboy Points 402

Utilisez les instructions préparées MySQLi . Le meilleur moyen de le faire sans aucun travail supplémentaire.

Lire les instructions préparées par MySQLi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X