У меня есть следующий код:
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(); } }