2011-06-03 14 views
17

Para esta consulta, ¿es necesario usar mysql_real_escape_string?¿Es necesario mysql_real_escape_string() al usar declaraciones preparadas?

¿Alguna mejora o la consulta está bien?

$consulta = $_REQUEST["term"]."%"; 

($sql = $db->prepare('select location from location_job where location like ?')); 

$sql->bind_param('s', $consulta); 
$sql->execute(); 
$sql->bind_result($location); 

$data = array(); 

while ($sql->fetch()) { 
    $data[] = array('label' => $location); 
} 

La velocidad de consulta es importante en este caso.

+0

posible duplicado de [¿Son seguras las consultas PHP MySQLi preparadas con parámetros vinculados?] (Http://stackoverflow.com/questions/1561586/are-php-mysqli-prepared-queries-with-bound-parameters-secure) – outis

Respuesta

20

No, las consultas preparadas (cuando se usan correctamente) garantizarán que los datos se escapen correctamente para una consulta segura. Lo estás usando de forma adecuada, solo necesitas cambiar una pequeña cosa. Porque estás usando el '?' marcador de posición, es mejor pasar parámetros a través del método de ejecución.

$sql->execute(array($consulta));

Sólo tenga cuidado si la salida que a su página, sanitización base de datos no significa que vaya a ser seguro para su visualización en HTML, por lo ejecute htmlspecialchars() en él también.

+0

Entonces, algo como esto? $ sql-> bind_param ('s'); $ sql-> execute (array ($ consulta)); – anvd

+0

Sorta, simplemente suelta el bind_param allí y deberías estar bien. Todo lo que haces es vincular tus parámetros cuando vas a llamar -> ejecutar(); – SamT

+0

y hay alguna ventaja? gracias – anvd

Cuestiones relacionadas