Índice

Gestión de apóstrofos en el texto de las consultas

En caso de utilizar consultas no preparadas, puede haber problemas si hay un apóstrofo en una cadena de caracteres presente en una consulta.

Ejemplo (inserción en una base de datos MySQL de un dato que contiene un apóstrofo):

<?php 
// Dato que plantea problema (puede introducirse inocentemente 
// en un formulario). 
$nombre = "Frank O’Connor"; 
$precio_siniva = 10; 
// Consulta de inserción. 
$sql = "INSERT INTO coleccion(nombre,precio_siniva) " . 
       "VALUES(’$nombre’,$precio_siniva)"; 
echo $sql,’<br />’; 
// Ejecución. 
$db = mysqli_connect(’localhost’,’eniweb’,’web’,’eni’); 
$consulta = mysqli_query($db,$sql); 
echo mysqli_error($db),’<br />’;  
$ok = mysqli_close($db); 
?>

Resultado

INSERT INTO coleccion(nombre,precio_siniva) VALUES(’O’Connor’,10) 
You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax 
to use near ’Connor’,10)’ at line 1

En SQL, el delimitador de cadena de caracteres es el apóstrofo: Si una consulta envía la cadena O’Connor a la base de datos, esta última interpretará ’O’ como una cadena y no sabrá qué hacer con el resto (Connor’):

Para solucionar este problema, es necesario ...