Spec-Zone .ru
спецификации, руководства, описания, API

21.8.7.54. mysql_real_escape_string()

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

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

Описание

Эта функция используется, чтобы создать юридическую строку SQL, которую можно использовать в SQL-операторе. См. Раздел 9.1.1, "Строковые литералы".

Строка в from кодируется к оставленной строке SQL, принимая во внимание текущий набор символов соединения. Результат помещается в to и завершающийся нулевой байт добавляется. Закодированные символы"\", "'", """, NUL (ASCII 0),"\n", "\r", и Control+Z. Строго говоря MySQL требует только, чтобы наклонной черты влево и символа кавычки, используемого, чтобы заключить строку в кавычки в запросе, оставили. mysql_real_escape_string() заключает другие символы в кавычки, чтобы сделать их легче читать в файлах журнала. Для сравнения см. правила заключения в кавычки для литеральных строк и QUOTE() Функция SQL в Разделе 9.1.1, "Строковых литералах", и Разделе 12.5, "Строковых функциях".

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

Если Вы должны изменить набор символов соединения, используйте mysql_set_character_set() функционируйте вместо того, чтобы выполнить a SET NAMES (или SET CHARACTER SET) оператор. mysql_set_character_set() работы как SET NAMES но также и влияет на набор символов, используемый mysql_real_escape_string(), который SET NAMES не делает.

Пример

char query[1000],*end;end = strmov(query,"INSERT INTO test_table values(");*end++ = '\'';end += mysql_real_escape_string(&mysql, end,"What is this",12);*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() функция, используемая в примере, включается в libmysqlclient библиотека и работы как strcpy() но возвращает указатель на завершающийся нуль первого параметра.

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

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

Ошибки

Ни один.