unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length)
Описание
Эта функция используется для создания допустимой SQL- строки, которую можно использовать в команде SQL. See Раздел 6.1.1.1, «Cтроки».
Строка из секции from
кодируется в экранированную SQL-строку, принимая во
внимание текущую кодировку данного соединения. Результат помещается в
секцию to с добавлением концевого нулевого байта. Кодируются следующие
символы: NUL
(ASCII 0), '\n
', '\r
', '\
', ''
', '"
' и Ctrl-Z (see Раздел 6.1.1, «Литералы: представление строк и чисел»).
(Строго говоря, MySQL требует только чтобы обратная косая черта и кавычки,
используемые для квотинга строк в запросе, были проэкранированы. Эта функция
экранирует и другие символы, делая их более легкими для чтения в журнальных
файлах.)
Строка, указанная в секции from
, должна быть длиной length
байтов.
Необходимо выделить для секции to буфер величиной по меньшей мере
length*2+1
байтов (в наихудшем случае каждый символ может потребовать
кодировки с использованием двух байтов и, кроме того, необходимо место для
концевого нулевого байта). При возврате функции mysql_real_escape_string()
содержимое секции to будет представлять собой строку с нулевым окончанием.
Возвращаемая величина представляет собой длину данной кодированной строки,
не включая концевой нулевой символ.
Пример
char query[1000],*end; end = strmov(query,"INSERT INTO test_table values("); *end++ = '\''; end += mysql_real_escape_string(&mysql, end,"What's this",11); *end++ = '\''; *end++ = ','; *end++ = '\''; end += mysql_real_escape_string(&mysql, end,"binary data: \0\r\n",16); *end++ = '\''; *end++ = ')'; if (mysql_real_query(&mysql,query,(unsigned int) (end - query))) { fprintf(stderr, "Failed to insert row, Error: %s\n", mysql_error(&mysql)); }
Функция strmov()
, использованная в этом примере, присутствует в библиотеке
mysqlclient
и работает подобно функции strcpy()
, но возвращает указатель
на концевой нуль первого параметра.
Возвращаемые значения
Длина величины, помещенной в секции to, не включая концевой нулевой символ.
Ошибки
Нет.