2015-03-05 2 views
0

Я работаю на PHP проект с MySQLi и нужно, чтобы получить информацию от пользователя через $_POST, моя проблема заключается в том, что я хочу использовать подготовленные заявления и mysqli->real_escape_string как это:использования 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

От http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

Экранирование и SQL-инъекции Связанные переменные отправляются на сервер отдельно от запроса и, таким образом, не может взаимодействовать с ним. Сервер использует эти значения непосредственно в точке выполнения после анализа шаблона оператора. Связанные параметры не обязательно должны быть экранированы, так как они никогда не подставляются в строку запроса напрямую. Подсказка должна быть предоставлена ​​серверу для типа связанной переменной, чтобы создать соответствующее преобразование. Дополнительную информацию см. В функции mysqli_stmt_bind_param().

+0

Спасибо ... так что мне не нужно использовать mysqli_real_escape_string с подготовленным оператором, потому что я удваиваю экранирование значений? если ответ да, мне никогда не придется использовать mysqli_real_escape_string при использовании готовых строк, потому что он уже выполняет экранирование? –

Смежные вопросы