# Главная
# О библиотеке

# Выбор дистрибутива
преимущества Linux/UNIX | основные дистрибутивы | серверный Linux | BSD | LiveCDs | прочее

# Установка и удаление программ
общие вопросы | каталоги софта | специальные случаи

# Настройка и работа
установка, загрузчики | настройка Linux | консоль | файловые системы | процессы | шеллы, русификация, коммандеры | виртуальные машины, эмуляторы

# X Window и оконные менеджеры
настройка X Window | GNOME | KDE | IceWM и др.

# Работа с текстами
редакторы | офис | шрифты, кодировки и русификация | преобразования текстовых файлов | LaTeX, SGML и др. | словари

# Графика
GIMP | фото | обработка изображений | форматы графических файлов

# Сети, администрирование
общие вопросы | Dialup & PPP | брандмауэры | маршрутизация | работа в Windows-сетях | веб-серверы | Apache | прокси-серверы | сетевая печать | прочее

# Программирование
GCC & GNU make | программирование в UNIX | графические библиотеки | Tcl | Perl | PHP | Java & C# | СУБД | CVS | прочее

# Ядро
# Мультимедиа
# Интернет
# Почта
# Безопасность
# Железо
# Разное

# Linux HowTo (как сделать)
# Книги и руководства
# Материалы на английском языке


MySQL The World's Most Popular Open Source Database # Online shop | Site map |  
CompanyProductsSupport & ConsultingTraining & CertificationDownloadsDocumentation
  BooksArticlesMailing ListsPresentationsOther Sites  
Search the MySQL manual:
MySQL Manual
  • 8 Интерфейсы для MySQL
    • 8.4 Интерфейс C для MySQL
      • 8.4.3 Описание функций интерфейса C
        • 8.4.3.1 mysql_affected_rows()
        • 8.4.3.6 mysql_change_user()
        • 8.4.3.11 mysql_character_set_name()
        • 8.4.3.15 mysql_close()
        • 8.4.3.19 mysql_connect()
        • 8.4.3.23 mysql_create_db()
        • 8.4.3.28 mysql_data_seek()
        • 8.4.3.32 mysql_debug()
        • 8.4.3.37 mysql_drop_db()
        • 8.4.3.42 mysql_dump_debug_info()
        • 8.4.3.46 mysql_eof()
        • 8.4.3.51 mysql_errno()
        • 8.4.3.55 mysql_error()
        • 8.4.3.59 mysql_escape_string()
        • 8.4.3.60 mysql_fetch_field()
        • 8.4.3.65 mysql_fetch_field_direct()
        • 8.4.3.70 mysql_fetch_fields()
        • 8.4.3.75 mysql_fetch_lengths()
        • 8.4.3.80 mysql_fetch_row()
        • 8.4.3.85 mysql_field_count()
        • 8.4.3.90 mysql_field_seek()
        • 8.4.3.94 mysql_field_tell()
        • 8.4.3.98 mysql_free_result()
        • 8.4.3.102 mysql_get_client_info()
        • 8.4.3.106 mysql_get_host_info()
        • 8.4.3.110 mysql_get_proto_info()
        • 8.4.3.114 mysql_get_server_info()
        • 8.4.3.118 mysql_info()
        • 8.4.3.122 mysql_init()
        • 8.4.3.126 mysql_insert_id()
        • 8.4.3.130 mysql_kill()
        • 8.4.3.134 mysql_list_dbs()
        • 8.4.3.138 mysql_list_fields()
        • 8.4.3.142 mysql_list_processes()
        • 8.4.3.146 mysql_list_tables()
        • 8.4.3.150 mysql_num_fields()
        • 8.4.3.155 mysql_num_rows()
        • 8.4.3.159 mysql_options()
        • 8.4.3.163 mysql_ping()
        • 8.4.3.167 mysql_query()
        • 8.4.3.171 mysql_real_connect()
        • 8.4.3.176 mysql_real_escape_string()
        • 8.4.3.181 mysql_real_query()
        • 8.4.3.185 mysql_reload()
        • 8.4.3.189 mysql_row_seek()
        • 8.4.3.193 mysql_row_tell()
        • 8.4.3.197 mysql_select_db()
        • 8.4.3.201 mysql_shutdown()
        • 8.4.3.205 mysql_stat()
        • 8.4.3.209 mysql_store_result()
        • 8.4.3.213 mysql_thread_id()
        • 8.4.3.217 mysql_use_result()

Buy this Reference Manual in softcover from Barnes & Noble!

MySQL Reference Manual
Previous / Next / Up / Table of Contents

8.4.3.176 mysql_real_escape_string()

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

8.4.3.177 Описание

Эта функция используется для создания допустимой SQL- строки, которую можно использовать в команде SQL. See section 6.1.1.1 Cтроки.

Строка из секции from кодируется в экранированную SQL-строку, принимая во внимание текущую кодировку данного соединения. Результат помещается в секцию to с добавлением концевого нулевого байта. Кодируются следующие символы: NUL (ASCII 0), `\n', `\r', `\', `'', `"' и Ctrl-Z (see section 6.1.1 Литералы: представление строк и чисел).

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

8.4.3.178 Пример


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(), но возвращает указатель на концевой нуль первого параметра.

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

Длина величины, помещенной в секции to, не включая концевой нулевой символ.

8.4.3.180 Ошибки

Нет.

User Comments

Posted by [email protected] on Monday January 20 2003, @1:12am[Delete] [Edit]

Documentation is unclear (at least to me):

> taking into account the current character
> set of the connection

What does this mean? How is mysql_real_escape_string affected by the character set?

To test the feature, I run the mysql server with default-character-set=usa7

Then I used mysql_real_escape_string on a string containing german special characters (ДЖЭъ), which should be illegal for the usa7 charset; nothing happened, i.e. mysql_real_escape_string neither removed nor changed these characters.

Thus, I experienced no change compared to mysql_escape_string.

Posted by Gerard Boor on Wednesday March 5 2003, @3:13am[Delete] [Edit]

This doesn't work when using the VC++ APIs for Win32 (and maybe also not in the BCB APIs), you get an unresolved external, even with all libs included.
Here is a solution that does the same. Buffer1 is your binary data, Buffer 2 is the data you put into the query;

char Buffer1[100]
char Buffer2[201]

for(int x = 0; x < 100; x++)
{
switch(Buffer[x])
{
case '\0':
Picture += "\\0";
break;
case '\n':
Picture += "\\n";
break;
case '\r':
Picture += "\\r";
break;
case '\'':
Picture += "\\'";
break;
case '"':
Picture += "\\\"";
break;
case '\\':
Picture += "\\\\";
break;
default:
Picture += Buffer[y];
break;
}

Posted by Gerard Boor on Wednesday March 5 2003, @3:14am[Delete] [Edit]

Errata: of course the 'Picture' should be 'Buffer2', sorry for the inconvenience.

Add your own comment.

Top / Previous / Next / Up / Table of Contents
# MySQL.com home | Site map | Contact us | Press | Jobs | Privacy policy | Trademark info | © 1995-2003 MySQL AB. All rights reserved.