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

StackOverflow https://stackoverflow.com/questions/2284317

Вопрос

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

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 в этом случае или я в порядке?

Это было полезно?

Решение

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

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


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

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

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

Другие советы

Нет, ты не должен. Комбинирование этих двух приведет к тому, что в ваших данных появится видимые экологичные символы.

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();    
 }    
}   
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top