mysql_real_escape_string()
unsigned long mysql_real_escape_string(MYSQL *mysql, char *to, const char *from, unsigned long length)
Описание
Эта функция используется для создания допустимой SQL- строки, которую можно использовать в команде SQL. См. раздел Cтроки.
Строка из секции from кодируется в экранированную SQL-строку, принимая во внимание текущую кодировку данного соединения. Результат помещается в секцию to с добавлением концевого нулевого байта. Кодируются следующие символы: NUL (ASCII 0), '\n', '\r', '\', ''', '"' и Ctrl-Z (См. раздел Литералы: представление строк и чисел).
Строка, указанная в секции from , должна быть длиной length байтов. Необходимо выделить для секции to буфер величиной по меньшей мере length*2+1 байтов (в наихудшем случае каждый символ может потребовать кодировки с использованием двух байтов и, кроме того, необходимо место для концевого нулевого байта). При возврате функции mysql_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, не включая концевой нулевой символ.
Ошибки
Нет.
mysql_real_query()
int mysql_real_query(MYSQL *mysql, const char *query, unsigned long length)
Описание
Выполняет SQL-запрос, указанный в query, который должен быть строкой длиною length байтов. Данный запрос должен состоять из одной команды SQL. Нельзя добавлять к этой команде в качестве завершающих элементов точку с запятой (';') или \g .
Необходимо использовать функцию mysql_real_query() вместо функции mysql_query() для запросов, содержащих двоичные данные, поскольку двоичные данные могут содержать символ '\0'. Кроме того, функция mysql_real_query() быстрее, чем mysql_query() так как она не вызывает функцию strlen() в строке запроса.
Для проверки того, вернул данный запрос результирующий набор или нет, можно использовать функцию mysql_field_count() . См. раздел mysql_field_count() .
Возвращаемые значения
Нуль при успешном выполнении запроса. Величина, отличная от нуля, если произошла ошибка.
Ошибки
CR_COMMANDS_OUT_OF_SYNC
Команды были выполнены в ненадлежащем порядке.
CR_SERVER_GONE_ERROR
Сервер MySQL неожиданно завершил работу.
CR_SERVER_LOST
Соединение с сервером прервалось в процессе данного запроса.
CR_UNKNOWN_ERROR
Произошла неизвестная ошибка.
mysql_reload()
int mysql_reload(MYSQL *mysql)
Описание
Запрашивает сервер MySQL перегрузить таблицы привилегий. Подключенный пользователь должен обладать правом RELOAD .
Данная функция не рекомендуется. Вместо нее предпочтительно использовать функцию mysql_query() для вызова SQL-команды FLUSH PRIVILEGES .
Возвращаемые значения
Нуль при успешном выполнении запроса. Величина, отличная от нуля, если произошла ошибка.
Ошибки
CR_COMMANDS_OUT_OF_SYNC
Команды были выполнены в ненадлежащем порядке.
CR_SERVER_GONE_ERROR
Сервер MySQL неожиданно завершил работу.
CR_SERVER_LOST
Соединение с сервером прервалось в процессе данного запроса.
CR_UNKNOWN_ERROR
Произошла неизвестная ошибка.
mysql_row_seek()
MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset)
Описание
Устанавливает курсор строки на произвольную заданную строку в результирующем наборе запроса. Это требует, чтобы структура результирующего набора содержала целиком весь результат данного запроса, поэтому функция mysql_row_seek() может использоваться только в соединении с mysql_store_result() , но не с mysql_use_result() .
Адрес смещения должен быть величиной, возвращенной в результате вызова функций mysql_row_tell() или mysql_row_seek() . Эта величина не является номером строки, поэтому для проведения поиска строки внутри результирующего набора по номеру строки вместо данной функции следует использовать функцию mysql_data_seek() .
Возвращаемые значения
Предыдущая позиция курсора строки. Эта величина может быть получена последовательным вызовом mysql_row_seek() .
Ошибки
Нет.
mysql_row_tell()
MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *result)
Описание
Возвращает позицию курсора строки, использованную для последнего вызова функции mysql_fetch_row() .Эта величина может использоваться как аргумент в функции mysql_row_seek() .
Функцию mysql_row_tell() следует использовать только после функции mysql_store_result() , но не после mysql_use_result() .
Возвращаемые значения
Текущая позиция курсора строки.
Ошибки
Нет.
mysql_select_db()
int mysql_select_db(MYSQL *mysql, const char *db)
Описание
Устанавливает базу данных, указанную в db , в качестве текущей базы данных по умолчанию для соединения, указанного в mysql . В последующих запросах эта база данных является текущей по умолчанию для табличных ссылок, которые не содержат явного указателя базы данных.
Функция mysql_select_db() не работает, пока подключенный пользователь не сможет быть аутентифицирован как имеющий право на использование запрашиваемой базы данных.
Возвращаемые значения
Нуль при успешном выполнении запроса. Величина, отличная от нуля, если произошла ошибка.
Ошибки
CR_COMMANDS_OUT_OF_SYNC
Команды были выполнены в ненадлежащем порядке.
CR_SERVER_GONE_ERROR
Сервер MySQL неожиданно завершил работу.
CR_SERVER_LOST
Соединение с сервером прервалось в процессе данного запроса.
CR_UNKNOWN_ERROR
Произошла неизвестная ошибка.
mysql_shutdown()
int mysql_shutdown(MYSQL *mysql)
Описание
Останавливает сервер баз данных. Подключенный пользователь должен иметь права SHUTDOWN .
Возвращаемые значения
Нуль при успешном выполнении запроса. Величина, отличная от нуля, если произошла ошибка.
Ошибки
CR_COMMANDS_OUT_OF_SYNC
Команды были выполнены в ненадлежащем порядке.
CR_SERVER_GONE_ERROR
Сервер MySQL неожиданно завершил работу.
CR_SERVER_LOST
Соединение с сервером прервалось в процессе данного запроса.
CR_UNKNOWN_ERROR
Произошла неизвестная ошибка.
mysql_stat()
char *mysql_stat(MYSQL *mysql)
Описание
Возвращает символьную строку, содержащую информацию, подобную предоставляемой командой mysqladmin status . Информация включает в себя время работы сервера в секундах, а также количество запущенных потоков, запросов, перегрузок и открытых таблиц.
Возвращаемые значения
Символьная строка с описанием статуса сервера. NULL , если возникла ошибка.
Ошибки
CR_COMMANDS_OUT_OF_SYNC
Команды были выполнены в ненадлежащем порядке.
CR_SERVER_GONE_ERROR
Сервер MySQL неожиданно завершил работу.
CR_SERVER_LOST
Соединение с сервером прервалось в процессе данного запроса.
CR_UNKNOWN_ERROR
Произошла неизвестная ошибка.
mysql_store_result()
MYSQL_RES *mysql_store_result(MYSQL *mysql)
Описание
Функцию mysql_store_result() или mysql_use_result() необходимо вызывать после каждого выполненного запроса, извлекающего данные (SELECT , SHOW , DESCRIBE , EXPLAIN ).
Нет необходимости в вызове функции mysql_store_result() или mysql_use_result() для других запросов, но не будет никакого вреда или заметной потери производительности, если функция mysql_store_result() будет вызываться во всех случаях. Можно определить, вернул ли данный запрос результирующий набор, проверкой, возвращает ли 0 функция mysql_store_result() (более подробно об этом см. дальше).
Для проверки того, вернул данный запрос результирующий набор или нет, можно использовать функцию mysql_field_count() . См. раздел mysql_field_count() .
Функция mysql_store_result() читает весь результат запроса данного клиента, выделяет структуру MYSQL_RES и помещает результат в эту структуру.
Функция mysql_store_result() возвращает нулевой указатель, если данный запрос не вернул результирующий набор (если этот запрос был, например, командой INSERT ).
Функция mysql_store_result() также возвращает нулевой указатель, если чтение результирующего набора завершилось неудачно. Выяснить, произошла ли ошибка, можно следующим образом: если mysql_error() не возвращает нулевой указатель, если mysql_errno() возвращает величину <> 0 или если mysql_field_count() возвращает величину <> 0.
Пустой результирующий набор возвращается в случае, если нет ни одной возвращенной строки. (Пустой результирующий набор и нулевой указатель - разные вещи в контексте возвращаемых величин.)
Если была вызвана функция mysql_store_result() и полученный результат не является нулевым указателем, то можно вызвать функцию mysql_num_rows() для определения количества строк в результирующем наборе.
Можно вызвать функцию mysql_fetch_row() для выборки строк из результирующего набора или функции mysql_row_seek() и mysql_row_tell() для получения или установки положения текущей строки внутри данного результирующего набора.
Необходимо вызвать функцию mysql_free_result() сразу же после окончания действий с результирующим набором.
См. раздел Почему после успешных возвратов функции mysql_query() функция mysql_store_result() иногда возвращает NULL ?.
Возвращаемые значения
Результирующая структура MYSQL_RES с результатами. NULL , если произошла ошибка.
Ошибки
CR_COMMANDS_OUT_OF_SYNC
Команды были выполнены в ненадлежащем порядке.
CR_OUT_OF_MEMORY
Нехватка памяти.
CR_SERVER_GONE_ERROR
Сервер MySQL неожиданно завершил работу.
CR_SERVER_LOST
Соединение с сервером прервалось в процессе данного запроса.
CR_UNKNOWN_ERROR
Произошла неизвестная ошибка.
mysql_thread_id()
unsigned long mysql_thread_id(MYSQL *mysql)
Описание
Возвращает идентификатор данного потока для текущего соединения. Эта величина может быть использована как аргумент для функции mysql_kill() для уничтожения данного потока.
Если соединение прерывается и осуществляется его восстановление с помощью функции mysql_ping() , то идентификатор данного потока изменится. Это означает, что нельзя получить идентификатор данного потока и хранить его для последующего использования. Следует определять его, когда в этом есть необходимость.
Возвращаемые значения
Идентификатор данного потока для текущего соединения.
Ошибки
Нет.
mysql_use_result()
MYSQL_RES *mysql_use_result(MYSQL *mysql)
Описание
Функцию mysql_store_result() или mysql_use_result() необходимо вызывать после каждого выполненного запроса, извлекающего данные (SELECT , SHOW , DESCRIBE , EXPLAIN ).
Функция mysql_use_result() инициализирует извлечение результирующего набора, но фактически не производит чтение в клиенте подобно тому, как это делает функция mysql_store_result() . Вместо этого каждая строка должна извлекаться индивидуально посредством вызова функции mysql_fetch_row() . При этом методе результат запроса читается непосредственно на сервере без промежуточного хранения его во временной таблице или локальном буфере, что быстрее и требует намного меньше памяти, чем использование функции mysql_store_result() . Клиент будет выделять память только для текущей строки и буфер связи может расти до величины max_allowed_packet байтов.
С другой стороны, функцию mysql_use_result() нельзя использовать, если выполняется много операций по обработке каждой строки на клиентской стороне, или если вывод делается на терминал, на котором пользователь может нажать ^S (остановить вывод).
Это будет ограничивать работу сервера и будет мешать другим потокам в обновлении таблиц, из которых выбираются данные.
При использовании mysql_use_result() необходимо выполнять mysql_fetch_row() , пока не возвратится величина NULL , в противном случае невыбранные строки данного запроса будут возвращены как часть результирующего набора для следующего запроса. Если вы забыли сделать это, то интерфейс C будет выдавать ошибку Commands out of sync; you can't run this command now!
Нельзя использовать функции mysql_data_seek() , mysql_row_seek() , mysql_row_tell() , mysql_num_rows() или mysql_affected_rows() для обработки результата, возвращенного функцией mysql_use_result() , а также нельзя запускать другие запросы, пока функция mysql_use_result() не завершится (однако после выборки всех строк функция mysql_num_rows() будет корректно возвращать количество выбранных строк).
Необходимо вызвать функцию mysql_free_result() сразу же после окончания действий с результирующим набором.
Возвращаемые значения
Результирующая структура MYSQL_RES с результатами. NULL , если произошла ошибка.
Ошибки
CR_COMMANDS_OUT_OF_SYNC
Команды были выполнены в ненадлежащем порядке.
CR_OUT_OF_MEMORY
Нехватка памяти.
CR_SERVER_GONE_ERROR
Сервер MySQL неожиданно завершил работу.
CR_SERVER_LOST
Соединение с сервером прервалось в процессе данного запроса.
CR_UNKNOWN_ERROR
Произошла неизвестная ошибка.
1 2 3 4 5 6
8 8 8
| |