No puedo insertar apóstrofes en MySQL

MySQL requiere un tratamiento cuidadoso de texto para el manejo de apóstrofes.
Por john papiewski

Delimitador de apóstrofe

En la versión SQL de MySQL se señala el comienzo y el final de una cadena con comillas simples o comillas dobles. Los dos ejemplos siguientes son válidos:

INSERT INTO COMPANY_TABLE (company_name) VALUES ‘The Fish Shack’;

INSERT INTO COMPANY_TABLE (company_name) VALUES “The Fish Shack”;

Sin embargo el siguiente ejemplo genera un error:

INSERT INTO COMPANY_TABLE (tag_line) VALUES ‘Eat at Joe’s -- It’s Good Food!’;

SQL interpreta la cadena como "'Eat at Joe'," con todo después del segundo apóstrofe como erróneo. El siguiente texto no soluciona el problema:

INSERT INTO COMPANY_TABLE (tag_line) VALUES “Eat at Joe’s -- It’s Good Food!”;

Esto funcionaría si el texto tuviera un solo apóstrofe entre las comillas dobles pero éste texto tiene dos. Además, debido a que algunos lenguajes de programación de páginas web utilizan comillas dobles, es posible que desees evitar el uso de ellos en tu SQL.


Los apóstrofes dobles y la barra invertida

La solución está determinada en que MySQL interprete los dos apóstrofes en una fila '' , como una comilla simple para los datos de tipo caracter. Utilizar un carácter de barra invertida, o "\", inmediatamente antes de un apóstrofe en los datos tiene el mismo efecto. MySQL trata la combinación de la barra invertida y otros caracteres especiales como una secuencia de escape, creando un caracter a partir de los dos. Los siguientes ejemplos solucionan el problema:

INSERT INTO COMPANY_TABLE (tag_line) VALUES ‘Eat at Joe’’s -- It’’s Good Food!’;

INSERT INTO COMPANY_TABLE (tag_line) VALUES ‘Eat at Joe\’s -- It\’s Good Food!’;

Al escribir programas para crear sentencias en MySQL, lo primero que debes hacer es explorar todas las cadenas de texto y añadir ya sea un apóstrofe o una barra invertida antes de los apóstrofes en los datos.


Función addslashes

El lenguaje de programación para web PHP es utilizado con frecuencia en combinación con MySQL, éste tiene una función llamada addslashes para convertir automáticamente apóstrofes. Basta con realizar la función de tus datos de tipo cadena como en este ejemplo:

$tag_line = addslashes($tag_line);


Función Stripslashes

Una vez que hayas convertido apóstrofes en las variables de datos de barra invertida y apóstrofes, es posible que tengas que convertir de nuevo a los datos normales. La función de PHP stripslashes te realiza ésta tarea en un solo paso. Utilízala como el siguiente ejemplo:

$tag_line = stripslashes($tag_line);