2010-04-07 16 views
8

estoy bastante nuevo en PHP lo siento si los sonidos un problema tan fácil ... :)cómo escapar comillas cuando se inserta en la base de datos con PHP

estoy teniendo un mensaje de error al insertar contenidos que contiene comillas en mi db. aquí es lo que traté tratando de escapar de las comillas, pero no funcionó:

$con = mysql_connect("localhost","xxxx","xxxxx"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

mysql_select_db("test", $con); 

$nowdate = date('d-m-Y') 

$title = sprintf($_POST[title], mysql_real_escape_string($_POST[title])); 

$body = sprintf($_POST[body], mysql_real_escape_string($_POST[body])); 

$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate'),"; 

if (!mysql_query($sql,$con)) 
    { 

die('Error: ' . mysql_error()); 

} 

header('Location: index.php'); 

Podría dar alguna solución por favor?

Gracias de antemano.

Mauro

+2

Por favor, muestre el mensaje de error, parece que ya está escapando de los datos correctamente. –

Respuesta

12

que debería funcionar sin el material sprintf

$title = mysql_real_escape_string($_POST[title]); 
$body = mysql_real_escape_string($_POST[body]); 
+0

¡Gracias, funciona como un encanto! – Mauro74

+1

@Mauro: Aún no debería usar esto, sino sentencias parametrizadas en su lugar. – Tomalak

+1

@Tomalak no "debería" sino "recomendado". Las declaraciones preparadas son más infalibles, sí, pero aún no son una bala de plata. –

2

Con cualquier consulta de bases de datos, especialmente inserta desde una aplicación basada en web, debe ser realmente el uso de parámetros. Consulte aquí para obtener ayuda de PHP sobre cómo usar los parámetros en sus consultas: PHP parameters

Esto ayudará a prevenir los ataques de inyección de SQL y evitará tener que escapar de los caracteres.

+0

¡Gracias, echaré un vistazo a eso! :) – Mauro74

2

Su código

$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate'),"; 

debe ser el siguiente

$sql="INSERT INTO articles (title, body, date) VALUES ('$title','$body','$nowdate')"; 

coma no debería estar ahí al final de la consulta

+0

sí, sé que la coma era solo un error tipográfico. – Mauro74

13

Por favor, comience a usar instrucciones con parámetros preparados. Eliminan la necesidad de escapes de SQL y cierran la brecha de inyección de SQL que las sentencias SQL concatenadas con cadenas dejan abiertas. Además, son mucho más agradables para trabajar y mucho más rápidos cuando se utilizan en un ciclo.

$con = new mysqli("localhost", "u", "p", "test"); 
if (mysqli_connect_errno()) die(mysqli_connect_error()); 

$sql = "INSERT INTO articles (title, body, date) VALUES (?, ?, NOW())"; 
$stmt = $con->prepare($sql); 
$ok = $stmt->bind_param("ss", $_POST[title], $_POST[body]); 

if ($ok && $stmt->execute()) 
    header('Location: index.php'); 
else 
    die('Error: '.$con->error); 
Cuestiones relacionadas