Я хочу исключить SQL-инъекцию, следует ли использовать реальную escape-строку mysqli или это ясно в mysqli? Например
$nick=mysqli_real_escape_string($_POST['nick'])
Я хочу исключить SQL-инъекцию, следует ли использовать реальную escape-строку mysqli или это ясно в mysqli? Например
$nick=mysqli_real_escape_string($_POST['nick'])
Вы должны использовать подготовленные инструкции и передавать строковые данные в качестве параметра, но вы не должны его избегать.
Этот пример взят из документации:
/* 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
, если бы вы вставляли строку непосредственно в запрос, но я бы посоветовал вам никогда этого не делать. Всегда используйте параметры, когда это возможно.
Похожие
Да, вы можете использовать mysqli_real_escape_string для форматирования строк, если вы собираетесь реализовать свой собственный процессор запросов, используя заполнители или какой-то конструктор запросов.
Если вы планируете использовать в своем коде функции открытого API (что, очевидно, неверно, но очень популяризировано местными людьми), лучше перейдите к подготовленным операциям.
Во всяком случае, вы не можете "исключить SQL-инъекцию", используя только эту функцию. mysql(i)_real_escape_string
функции не предотвращают инъекции и не должны использоваться для какой-либо защиты.