mysqli::real_escape_string
mysqli::escape_string
mysqli_real_escape_string
(PHP 5, PHP 7)
mysqli::real_escape_string -- mysqli::escape_string -- mysqli_real_escape_string — Экранирует специальные символы в строке для использования в SQL-выражении, используя текущий набор символов соединения
Описание
Объектно-ориентированный стиль
$escapestr
) : stringПроцедурный стиль
Эта функция используется для создания допустимых в SQL строк, которые можно использовать в SQL выражениях. Заданная строка кодируется в экранированную SQL строку, используя текущий набор символов подключения.
Безопасность: набор символов по умолчанию
Набор символов должен быть задан либо на стороне сервера, либо с помощью API-функции mysqli_set_charset(). В противном случае mysqli_real_escape_string() работать не будет. За дополнительной информацией обращайтесь к документации наборы символов.
Список параметров
-
link
-
Только для процедурного стиля: Идентификатор соединения, полученный с помощью mysqli_connect() или mysqli_init()
-
escapestr
-
Строка, которую требуется экранировать.
Экранируемые символы
NUL (ASCII 0), \n, \r, \, ', ", и Control-Z
.
Возвращаемые значения
Возвращает экранированную строку.
Ошибки
Использование этой функции без корректного идентификатора соединения
вернет null
и вызовет ошибку уровня E_WARNING
.
Примеры
Пример #1 Пример использования mysqli::real_escape_string()
Объектно-ориентированный стиль
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* проверка соединения */
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}
$mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City");
$city = "'s Hertogenbosch";
/* этот запрос вызовет ошибку, так как мы не экранировали $city */
if (!$mysqli->query("INSERT into myCity (Name) VALUES ('$city')")) {
printf("Ошибка: %s\n", $mysqli->sqlstate);
}
$city = $mysqli->real_escape_string($city);
/* этот запрос отработает нормально */
if ($mysqli->query("INSERT into myCity (Name) VALUES ('$city')")) {
printf("%d строк вставлено.\n", $mysqli->affected_rows);
}
$mysqli->close();
?>
Процедурный стиль
<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* проверка соединения */
if (mysqli_connect_errno()) {
printf("Не удалось подключиться: %s\n", mysqli_connect_error());
exit();
}
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
$city = "'s Hertogenbosch";
/* этот запрос вызовет ошибку, так как мы не экранировали $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
printf("Ошибка: %s\n", mysqli_sqlstate($link));
}
$city = mysqli_real_escape_string($link, $city);
/* этот запрос отработает нормально */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
printf("%d строк вставлено.\n", mysqli_affected_rows($link));
}
mysqli_close($link);
?>
Результат выполнения данных примеров:
Ошибка: 42000 1 строк вставлено.
Примечания
Замечание:
Тем, кто привык использовать функцию mysql_real_escape_string(), следует обратить внимание, что аргументы mysqli_real_escape_string() отличаются от аргументов mysql_real_escape_string(). Идентификатор
link
в mysqli_real_escape_string() идет первым, в то время как в mysql_real_escape_string() первой идет экранируемая строка.
Смотрите также
- mysqli_set_charset() - Задает набор символов по умолчанию
- mysqli_character_set_name() - Возвращает кодировку по умолчанию, установленную для соединения с БД