Я должен использовать 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 в этом случае, или я хорошо?

17
задан Jon Seigel 4 March 2010 в 18:46
поделиться

3 ответа

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

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


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

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

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

27
ответ дан 30 November 2019 в 12:50
поделиться

Нет, нельзя. Их сочетание приведет к появлению в ваших данных видимых escape-символов .

1
ответ дан 30 November 2019 в 12:50
поделиться
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();    
 }    
}   
0
ответ дан 30 November 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: