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

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

(На самом деле, если вы 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(); } }