No puedo insertar apóstrofes en MySQL
El caracter apóstrofe presenta un problema en todas las versiones de SQL utilizadas para la programación de base de datos. Para MySQL, como en otras versiones de SQL, los programadores encierran datos de tipo caracter con apóstrofes para insertar datos en una tabla o para actualizar o realizar otras funciones de base de datos. El problema surge cuando los datos de tipo caracter contienen apóstrofes utilizados como signos de puntuación. La solución consiste en colocar un carácter especial inmediatamente antes de cualquier apóstrofe en los datos de éste tipo.
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);