Экранирует специальные символы в строке для использования в SQL выражении, используя текущий набор символов соединения


mysqli_real_escape_string

(PHP 5)

mysqli::real_escape_string -- mysqli_real_escape_string Экранирует специальные символы в строке для использования в SQL выражении, используя текущий набор символов соединения

Описание

Объектно-ориентированный стиль

string mysqli::escape_string ( string $escapestr )
string mysqli::real_escape_string ( string $escapestr )

Процедурный стиль

string mysqli_real_escape_string ( mysqli $link , string $escapestr )

Эта функция используется для создания допустимых в SQL строк, которые можно использовать в SQL выражениях. Заданная строка кодируется в экранированную SQL строку, используя текущий набор символов подключения.

Предостережение

Безопасность: набор символов по умолчанию

Набор символов должен быть задан либо на стороне сервера, либо с помощью API функции mysqli_set_charset(). В противном случае mysqli_real_escape_string() работать не будет. За дополнительной информацией обращайтесь к документации наборы символов.

Список параметров

link

Только для процедурного стиля: Идентификатор соединения, полученный с помощью mysqli_connect() или mysqli_init()

escapestr

Строка, которую требуется экранировать.

Экранируемые символы NUL (ASCII 0), \n, \r, \, ', ", и Control-Z.

Возвращаемые значения

Возвращает экранированную строку.

Примеры

Пример #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() - Возвращает кодировку по умолчанию, установленную для соединения с БД