Spec-Zone.ru › MySQL Connectors 1.0

5.4.61 mysql_real_escape_string_quote()

unsigned long
mysql_real_escape_string_quote(MYSQL *mysql,
                               char *to,
                               const char *from,
                               unsigned long length,
                               char quote)

Описание

Эта функция создаёт корректную строку SQL для использования в операторе SQL. Смотрите .

Аргумент mysql должен быть валидным открытым соединением, поскольку экранирование символов зависит от используемого на сервере набора символов.

Строка в аргументе from кодируется для получения экранированной строки SQL, учитывая текущий набор символов соединения. Результат помещается в аргумент to, за которым следует завершающий нулевой байт.

Экранируются символы \, ', ", NUL (ASCII 0), \n, \r, Control+Z и `. Строго говоря, MySQL требует экранирования только обратной косой черты и символа кавычек, используемого для кавычек строки в запросе. mysql_real_escape_string_quote() экранирует другие символы, чтобы их было легче читать в файлах журналов. Для сравнения см. правила цитирования строковых литералов и функцию SQL в , и .

Примечание

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

Строка, на которую указывает from, должна иметь длину length байт. Буфер to должен быть выделен как минимум на length*2+1 байт. (В худшем случае каждый символ может потребовать кодирования в два байта, и должен быть объём для завершающего нулевого байта.) Когда mysql_real_escape_string_quote() возвращает значение, содержимое to является строкой с завершающим нулевым символом. Возвращаемое значение — длина закодированной строки без учёта завершающего нулевого байта.

Аргумент quote указывает контекст, в котором должна быть размещена экранированная строка. Предположим, что вы хотите экранировать аргумент from и вставить экранированную строку (обозначенную здесь как str) в один из следующих операторов:

1) SELECT * FROM table WHERE name = 'str'
2) SELECT * FROM table WHERE name = "str"
3) SELECT * FROM `str` WHERE id = 103

Чтобы правильно выполнить экранирование для каждого оператора, вызовите mysql_real_escape_string_quote() следующим образом, где последний аргумент указывает контекст цитирования:

1) len = mysql_real_escape_string_quote(&mysql,to,from,from_len,'\'');
2) len = mysql_real_escape_string_quote(&mysql,to,from,from_len,'"');
3) len = mysql_real_escape_string_quote(&mysql,to,from,from_len,'`');

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

Пример

Следующий пример вставляет две экранированные строки в оператор INSERT, каждая внутри одинарных кавычек:

char query[1000],*end;

end = my_stpcpy(query,"INSERT INTO test_table VALUES('");
end += mysql_real_escape_string_quote(&mysql,end,"What is this",12,'\'');
end = my_stpcpy(end,"','");
end += mysql_real_escape_string_quote(&mysql,end,"binary data: \0\r\n",16,'\'');
end = my_stpcpy(end,"')");

if (mysql_real_query(&mysql,query,(unsigned int) (end - query)))
{
   fprintf(stderr, "Failed to insert row, Error: %s\n",
           mysql_error(&mysql));
}

Функция my_stpcpy(), используемая в примере, включена в библиотеку libmysqlclient и работает как strcpy(), но возвращает указатель на завершающий нуль первого параметра.

Значения возврата

Длина закодированной строки, помещенной в аргумент to, без учёта завершающего нулевого байта.

Ошибки

Нет.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/c-api-8.0-en/mysql-real-escape-string-quote.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API