我正在使用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
?如果是的话,我的代码很好吗?你能给出更好的样品吗?
答案 0 :(得分:0)
来自http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
转义和SQL注入 绑定变量与查询分开发送到服务器,因此不会干扰它。在解析语句模板之后,服务器直接在执行点使用这些值。 绑定参数不需要进行转义,因为它们永远不会直接替换为查询字符串。必须为服务器提供绑定变量类型的提示,以创建适当的转换。有关更多信息,请参阅mysqli_stmt_bind_param()函数。