Должен ли я использовать mysql_real_escape_string, если я связываю параметры?
-
21-09-2019 - |
Вопрос
У меня есть следующий код:
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();
}
}