2010-09-04 48 views
8

Tengo una tabla como esta ...escapar comillas simples

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

tengo que sustituir la comilla simple 'con \'

También necesitaré para escapar comillas dobles y barra invertida.

+12

que se olvidó de decirle qué * * que tiene que hacer esto. Porque es probable que no. – Tomalak

+0

En un procedimiento almacenado, estoy usando la instrucción de preparación. La comilla simple se está completando en la comilla simple que se encuentra en los datos de mysql. – shantanuo

+0

Hay comillas simples y dobles en la columna, así que no puedo usar ningún presupuesto para completar la declaración preparada. – shantanuo

Respuesta

9

Pruebe esto;

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

Es posible que desee pensar precisamente sobre qué es posible que desee hacer esto (como se ha dicho Tomalak). Incluso en un procedimiento almacenado, estos campos deben ser cadenas, no comandos.

2
+0

Las comillas dobles no se manejan con eso. – shantanuo

+0

Y está agregando comillas simples adicionales SELECT ('Don \' t! '); – shantanuo

+1

@shantanuo, ¿por qué crees que las comillas dobles * necesitan * ser escapadas? –

19

El punto de declaraciones preparadas es que usted no tiene que incluir el contenido en ellos. Utilice una consulta PREPARE con marcadores de posición ? y luego EXECUTE ... USING para pasar los valores sin tener que escapar de ellos.

No intente escaparse, porque es probable que cometa errores. Dependiendo de la codificación que esté utilizando, puede haber más que solo comillas salientes, barras invertidas y nulas.

2

Prueba esto:

SELECT REPLACE(REPLACE(name , "'", "\\'") , '"', '\\"') 
FROM myescape 
Cuestiones relacionadas