2010-09-04 4 views
8

J'ai une table comme ça ...échapper à des guillemets simples

select * from myescape; 
+-----------+ 
| name  | 
+-----------+ 
| shantanu' | 
| kumar's | 
+-----------+ 
2 rows in set (0.00 sec) 

Je dois remplacer la citation unique « avec \ »

Je vais aussi devoir échapper des guillemets doubles et anti-slash.

+12

Vous avez oublié de dire * pourquoi * vous devez faire. Parce que les chances sont que vous ne le faites pas. – Tomalak

+0

Dans une procédure stockée, j'utilise l'instruction prepare. La citation unique est complétée à la citation unique trouvée dans les données mysql. – shantanuo

+0

Il y a des guillemets simples et doubles dans la colonne, donc je ne peux pas utiliser de guillemets pour compléter l'instruction préparée. – shantanuo

Répondre

9

Essayez ceci;

UPDATE myescape SET name = REPLACE(name, "'", "\\'"); 

Vous pouvez penser précisément à propos pourquoi vous pouvez le faire (comme Tomalak a dit). Même dans une procédure stockée, ces champs doivent être des chaînes et non des commandes.

2
+0

Les guillemets doubles ne sont pas traités en utilisant cela. – shantanuo

+0

Et il ajoute une citation simple supplémentaire SELECT ('Don \' t! '); – shantanuo

+1

@shantanuo, pourquoi pensez-vous que les guillemets doubles * doivent * être échappés? –

19

Le point de déclarations préparées est que vous ne devez pas inclure le contenu en eux. Utilisez une requête PREPARE avec des espaces réservés ?, puis EXECUTE ... USING pour transmettre les valeurs sans avoir à leur échapper. N'essayez pas de vous échapper, car vous risquez de commettre des erreurs. En fonction de l'encodage que vous utilisez, il peut y avoir plus que des guillemets simples, backslash et null.

2

Essayez ceci:

SELECT REPLACE(REPLACE(name , "'", "\\'") , '"', '\\"') 
FROM myescape 
Questions connexes