将mysqli_real_escape_string与预准备语句一起使用

时间:2015-03-05 04:23:59

标签: php mysqli

我正在使用mysqli处理PHP项目,需要通过$_POST从用户检索信息,我的问题是我想使用预处理语句和mysqli->real_escape_string这样:

//$mysqli is the link to my database
if( isset($_POST['ID_name']) && isset($_POST['Nombre_name']) )
        {
//just in case magic_quotes_gpc is on
            $id = trim(htmlentities(mysqli_real_escape_string(stripslashes($mysqli,$_POST['ID_name']))));
            $nombre = trim(htmlentities(mysqli_real_escape_string(stripslashes($mysqli,$_POST['Nombre_name'])));  

//... more code validation but not reffered to my question...

$query="insert into empleado_php values(?,?)";

if(!($consulta=$mysqli->stmt_init())){
    echo"Error al crear la sentencia ingresar.php";
    exit();
    }
if(!($consulta->prepare($query))){
    echo"Error al prepara la consulta ingresar.php";
    exit();
    }
if(!($consulta->bind_param("ss", $id, $nombre))){
    echo"Error anexando parametros ingresar.php";
    exit();
}
if(!($consulta->execute())){
    echo "Error al ejecutar la consulta";
    echo"<br>";
    echo "Error ".$consulta->error. "con codigo  " .$consulta->errno;
    exit();
}
else{
    echo "Datos ingresados exitosamente !!!";
}
$consulta->close();
$mysqli->close();
?>

我的问题是:使用预准备语句时是否需要使用mysqli_real_scape_string?如果是的话,我的代码很好吗?你能给出更好的样品吗?

1 个答案:

答案 0 :(得分:0)

来自http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

转义和SQL注入 绑定变量与查询分开发送到服务器,因此不会干扰它。在解析语句模板之后,服务器直接在执行点使用这些值。 绑定参数不需要进行转义,因为它们永远不会直接替换为查询字符串。必须为服务器提供绑定变量类型的提示,以创建适当的转换。有关更多信息,请参阅mysqli_stmt_bind_param()函数。