Échappez à l'apostrophe (c'est-à-dire doublez le caractère apostrophe) dans votre SQL :
INSERT INTO Person
(First, Last)
VALUES
('Joe', 'O''Brien')
/\
juste ici
La même chose s'applique aux requêtes SELECT :
SELECT First, Last FROM Person WHERE Last = 'O''Brien'
L'apostrophe, ou simple quote, est un caractère spécial en SQL qui spécifie le début et la fin des données de chaîne. Cela signifie que pour l'utiliser dans vos données de chaîne littérale, vous devez échapper
le caractère spécial. Avec une apostrophe, cela est généralement réalisé en doublant votre apostrophe (deux caractères d'apostrophe simple, pas d'apostrophe double à la place d'une apostrophe simple).
Remarque : Vous ne devriez jamais vous soucier de ce problème que lorsque vous éditez manuellement des données via une interface SQL brute, car l'écriture de requêtes en dehors du développement et des tests devrait être rare. Dans le code, il existe des techniques et des frameworks (selon votre pile technologique) qui se chargent de l'échappement des caractères spéciaux, des injections SQL, etc.
22 votes
Veuillez confirmer que vous ne vous exposez pas aux attaques par injection SQL. Utilisez des paramètres lorsque cela est possible.
0 votes
Quel langage de script utilisez-vous? Il y a des fonctions en PHP, par exemple, pour le faire correctement pour vous.
0 votes
D'accord avec Andrew ici: J'espère que cette question concerne uniquement l'exécution de SQL via un client SQL ou un "navigateur de requêtes" ou similaire et non pas réellement quelque part dans le code de production. Ne pas utiliser de déclarations paramétrées est une folie.
0 votes
Il s'agit en fait de code. Si j'avais une requête paramétrée, ne devrais-je pas faire la même chose ?
3 votes
Négatif. Selon la base de données et le pilote que vous utilisez, l'isolation des paramètres peut être gérée différemment, mais les paramètres dans une instruction paramétrée ne nécessitent pas d'échappement. Voir fr.wikipedia.org/wiki/Injection_SQL#Prévention_de_l'injection_SQL
0 votes
PHP: Si des données avec du texte entre guillemets sont stockées dans une variable nommée $data, alors faire ceci "<$data = str_replace("'","''",$data);>"