Подтвердить что ты не робот

Должен ли я использовать mysql_real_escape_string, если я привязываю параметры?

У меня есть следующий код:

function dbPublish($status)
{
 global $dbcon, $dbtable;

 if(isset($_GET['itemId']))
 {
  $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';
  $stmt = $dbcon->prepare($sqlQuery);
  $stmt->bind_param('ii', $status, $_GET['itemId']);
  $stmt->execute();
  $stmt->close();
 }
}

Нужно ли мне в mysql_real_escape_string в этом случае или я в порядке?

4b9b3361

Ответ 1

Нет, вам не нужно самостоятельно избегать значения (т.е. вам не нужно вызывать mysqli_real_escape_string), когда вы используете подготовленные операторы: механизм БД сделает это сам.

(На самом деле, если вы вызывали mysql_real_escape_string и использовали связанные параметры, ваши строки могли бы получить экранирование дважды - что бы не было замечательно: вы в конечном итоге избегаете символов везде...)


В качестве побочного элемента: ваши значения передаются как целые числа (как указано в 'ii'), поэтому вам не нужно было бы вызывать mysql_real_escape_string, даже если вы не использовали подготовленные операторы: по мере того, как его имя указывает, эта функция используется чтобы избежать... строк.

Для целых чисел я обычно просто использую intval, чтобы убедиться, что данные, которые я вставляю в мои SQL-запросы, действительно являются целыми числами.

(Но, поскольку вы используете подготовленные запросы, еще раз вам не нужно делать этого, чтобы ускользнуть самостоятельно)

Ответ 2

Нет, не надо. Сочетание этих двух результатов в видимых escape-символах, отображаемых в ваших данных.

Ответ 3

function dbPublish($status)    
{    
 global $dbcon, $dbtable;    

 if(isset($_GET['itemId']))    
 {    
  $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';    
  $stmt = $dbcon->prepare($sqlQuery);    
  $stmt->bind_param('ii', $status, $_GET['itemId']);    
  $stmt->execute();    
  $stmt->close();    
 }    
}