Подтвердить что ты не робот

Mysqli real escape string, следует ли использовать его?

Я хочу исключить SQL-инъекцию, следует ли использовать реальную escape-строку mysqli или это ясно в mysqli? Например

$nick=mysqli_real_escape_string($_POST['nick'])
4b9b3361

Ответ 1

Вы должны использовать подготовленные инструкции и передавать строковые данные в качестве параметра, но вы не должны его избегать.

Этот пример взят из документации:

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

    /* bind parameters for markers */
    $stmt->bind_param("s", $city);

    /* execute query */
    $stmt->execute();

    /* bind result variables */
    $stmt->bind_result($district);

    /* fetch value */
    $stmt->fetch();

    printf("%s is in district %s\n", $city, $district);

    /* close statement */
    $stmt->close();
}

Обратите внимание, что пример не вызывает mysqli_real_escape_string. Вам нужно было бы использовать mysqli_real_escape_string, если бы вы вставляли строку непосредственно в запрос, но я бы посоветовал вам никогда этого не делать. Всегда используйте параметры, когда это возможно.

Похожие

Ответ 2

Да, вы можете использовать mysqli_real_escape_string для форматирования строк, если вы собираетесь реализовать свой собственный процессор запросов, используя заполнители или какой-то конструктор запросов.

Если вы планируете использовать в своем коде функции открытого API (что, очевидно, неверно, но очень популяризировано местными людьми), лучше перейдите к подготовленным операциям.

Во всяком случае, вы не можете "исключить SQL-инъекцию", используя только эту функцию. mysql(i)_real_escape_string функции не предотвращают инъекции и не должны использоваться для какой-либо защиты.