MySQL- Руководство разработчика

Возвращает число строк, измененных последним


Возвращает число строк, измененных последним UPDATE, удаленных последним DELETE или вставленных последней инструкцией INSERT. Может быть вызвана немедленно после mysql_query() для UPDATE, DELETE или INSERT. Для инструкции SELECT mysql_affected_rows() работает подобно mysql_num_rows().


Пытается устанавливать подключение с сервером MySQL на компьютере host. mysql_connect() должна завершиться успешно прежде, чем Вы сможете выполнить любую из функций API, за исключением mysql_get_client_info().
Значения параметров такие же, как для соответствующих параметров mysql_real_connect() с тем различием, что параметр подключения может быть NULL. В этом случае API распределяет память для структуры подключения автоматически и освобождает ее, когда Вы вызываете mysql_close(). Недостаток этого подхода в том, что Вы не можете получить сообщение об ошибке, если подключение терпит неудачу. Чтобы получать информацию об ошибке из mysql_errno() или mysql_error(), Вы должны обеспечить имеющий силу указатель на структуру MYSQL.


Меняет пользователя и заставляет базу данных, определенную как db, стать заданной по умолчанию (текущей) базой данных на подключении, определенном mysql. В последующих запросах эта база данных будет значением по умолчанию для ссылок на таблицы, которые не включают явный спецификатор базы данных.
Эта функция впервые была представлена в MySQL Version 3.23.3.
mysql_change_user() терпит неудачу, если указанный пользователь не может быть использован, или если он не имеет разрешения использовать эту базу данных. В этом случае пользователь и база данных не будут изменены вообще.
Параметр db может быть установлен в NULL, если Вы не хотите иметь заданную по умолчанию базу данных.


Переходит к произвольной строке в наборе результатов запроса. Это требует, чтобы структура набора результата содержала весь результат запроса, так что mysql_data_seek() может использоваться только в конъюнкции с mysql_store_result(), но никак не с mysql_use_result().
Смещение должно быть значением в диапазоне от 0 до mysql_num_rows(result)-1.




Делает DBUG_PUSH с заданной строкой. Вызов mysql_debug() использует библиотеку отладки Fred Fish. Чтобы использовать эту функцию, Вы должны компилировать библиотеку клиентов так, чтобы поддерживать отладку.


Инструктирует сервер, чтобы писать некоторую информацию отладки в файл регистрации. Отдавший команду пользователь должен иметь привилегию process, чтобы работать.


mysql_eof() определяет, читалась или нет последняя строка набора результатов.
Если Вы приобретаете результат из успешного обращения к mysql_store_result(), клиент получает весь набор в одной операции. В этом случае возврат NULL из mysql_fetch_row() всегда означает, что конец набора результатов был достигнут и не нужно вызвать mysql_eof().
С другой стороны, если Вы используете mysql_use_result(), чтобы инициализировать поиск набора результата, строки набора получены с сервера по одной, поскольку Вы вызываете mysql_fetch_row() неоднократно. Потому что ошибка может происходить на подключении в течение этого процесса, значение NULL из функции mysql_fetch_row() не обязательно означает, что конец набора результатов был достигнут. В этом случае, Вы можете использовать mysql_eof(), чтобы определить, что там случилось. Функция mysql_eof() возвращает значение, отличное от нуля, если конец набора результатов был достигнут и ноль, если произошла ошибка.
Исторически mysql_eof() предшествует стандартной функции MySQL mysql_errno() и mysql_error(). Так как те функции ошибки обеспечивают ту же самую информацию, их использование предпочтительнее mysql_eof(). Фактически, они обеспечивают большее количество информации потому, что mysql_eof() возвращает только булево значение, в то время как функции ошибки указывают причину.


Для подключения, определенного в mysql, mysql_errno() возвращает код ошибки для вызванной функции API, которая может сработать нормально или потерпеть неудачу. Значение возврата 0 означает, что никакой ошибки не произошло. Числа сообщений об ошибках клиента перечислены в файле заголовка MySQL errmsg.h. Серверные ошибки перечислены в mysqld_error.h. В дистрибутиве исходного кода MySQL Вы можете найти полный список сообщений об ошибках и их кодов в файле Docs/mysqld_error.txt.


Для подключения, определенного в mysql, mysql_error() возвращает сообщение об ошибках для вызванной функции API, которая может сработать нормально или потерпеть неудачу. Пустая строка вернется, если никакой ошибки не произошло. Это означает, что следующие тесты эквивалентны:
if (mysql_errno(&mysql)) { // an error occurred } if (mysql_error(&mysql)[0] != '\0') { // an error occurred }
Язык сообщений об ошибках пользователя может быть изменен перекомпиляцией библиотеки клиента MySQL. В настоящее время Вы можете выбирать сообщения об ошибках на нескольких различных языках.


Возвращает определение одного столбца набора результатов как структуру MYSQL_FIELD. Вызовите эту функцию неоднократно, чтобы собрать информацию относительно всех столбцов в наборе результатов. mysql_fetch_field() возвращает NULL, когда все поля уже обработаны или их не было вовсе.
mysql_fetch_field() будет сброшен так, чтобы возвратить информацию относительно первого поля каждый раз, когда Вы выполняете новый запрос SELECT. На поле, возвращенное mysql_fetch_field() также воздействуют обращения к mysql_field_seek().
Если Вы вызвали mysql_query() чтобы выполнить SELECT на таблице, но не вызвали mysql_store_result(), MySQL возвращает заданную по умолчанию длину blob (8K), если Вы вызываете mysql_fetch_field(), чтобы спросить о длине поля типа BLOB. Размер в 8K выбран потому, что MySQL не знает максимальную длину для BLOB. Это должно быть сделано с перестраиваемой конфигурацией когда-нибудь. Как только Вы получили набор результатов, field.max_length хранит длину самого большого значения для этого столбца в специфическом запросе.


Возвращает массив всех структур MYSQL_FIELD для набора результатов. Каждая структура обеспечивает определение поля для одного столбца набора результатов.


Получает код поля fieldnr для столбца внутри набора результатов, возвращает определение поля столбца как структура MYSQL_FIELD. Вы можете использовать эту функцию, чтобы получить описание для произвольного столбца. Значение fieldnr должно быть в диапазоне от 0 до mysql_num_fields(result)-1.


Возвращает длины столбцов текущей (актуальной) строки внутри набора результатов. Если Вы планируете копировать значения поля, эта информация также полезна для оптимизации потому, что Вы можете избежать вызова strlen(). Кроме того, если набор результатов содержит двоичные данные, Вы должны использовать эту функцию, чтобы определить размер данных потому, что функция strlen() возвращает неправильные результаты для любого поля, содержащего символы пробела.
Длина для пустых столбцов и для столбцов, содержащих значения NULL, равна нулю. Чтобы видеть, как отличить эти два случая, обратитесь к описанию mysql_fetch_row().


Получает следующую строку набора результатов. Когда используется после mysql_store_result(), mysql_fetch_row() возвращает NULL, когда не имеется больше строк, чтобы получить. Когда используется после mysql_use_result(), mysql_fetch_row() вернет NULL, когда не имеется больше строк, чтобы получить, или произошла ошибка.
Число значений в строке задано mysql_num_fields(result). Если row хранит значение возврата от обращения к mysql_fetch_row(), указатели на значения меняются с row[0] на row[mysql_num_fields(result)-1]. Значения NULL в строке обозначены указателями NULL.
Длины значений полей в строке могут быть получены, вызывая mysql_fetch_lengths(). Пустые поля и поля, содержащие NULL имеют длину 0. Вы можете отличать их, проверяя указатель для значения поля. Если указатель равен NULL, поле NULL, иначе поле пустое.


Возвращает число столбцов для самого последнего запроса на подключении.
Нормальное использование этой функции: когда mysql_store_result() возвращает NULL (и таким образом Вы не имеете никакого указателя на набор результатов). В этом случае Вы можете вызывать mysql_field_count(), чтобы определить, должен или нет mysql_store_result() произвести не пустой результат. Это позволяет программе пользователя выбрать соответствующее действие без того, чтобы знать, был или нет запрос SELECT (или SELECT-подобным). Пример, показанный ниже иллюстрирует, как это может быть выполнено.


Устанавливает курсор поля к данному смещению. Следующее обращение к mysql_fetch_field() получит определение поля столбца, связанного именно с этим смещением.
Чтобы перейти к началу строки, передайте 0 как значение offset.


Возвращает позицию курсора поля, используемого для последнего mysql_fetch_field(). Это значение может использоваться как параметр для mysql_field_seek().


Освобождает память, распределенную для набора результатов mysql_store_result(), mysql_use_result(), mysql_list_dbs() и другими подобными функциями. Когда Вы закончили работу с набором результатов, Вы должны освободить память, которую он использует, вызывая mysql_free_result().


Возвращает строку, которая представляет версию клиентской библиотеки.


Возвращает строку, описывающую тип используемого подключения, включая имя главного компьютера сервера.


Возвращает код версии протокола, используемой текущим подключением.


Возвращает строку, которая представляет номер версии сервера.


Возвращает строку, обеспечивающую информацию относительно недавно выполненного запроса, но только для инструкций, перечисленных ниже. Для других инструкций mysql_info() всегда возвращает NULL. Формат строки изменяется в зависимости от типа запроса, как описано ниже. Числа только иллюстративны: строка будет содержать значения, соответствующие запросу.
INSERT INTO ... SELECT ... Формат строки: Records: 100 Duplicates: 0 Warnings: 0 INSERT INTO ... VALUES (...),(...),(...)... Формат строки: Records: 3 Duplicates: 0 Warnings: 0 LOAD DATA INFILE ... Формат строки: Records: 1 Deleted: 0 Skipped: 0 Warnings: 0 ALTER TABLE Формат строки: Records: 3 Duplicates: 0 Warnings: 0 UPDATE Формат строки: Rows matched: 40 Changed: 40 Warnings: 0
Обратите внимание, что mysql_info() возвращает значение не-NULL для инструкции INSERT ... VALUES только, если много списков значений было определено в инструкции.


Распределяет или инициализирует объект MYSQL, подходящий для mysql_real_connect(). Если mysql является указателем NULL, функция распределяет память, инициализирует и возвращает новый объект. Иначе объект будет просто инициализирован, и адрес объекта возвращен. Если mysql_init() распределяет новый объект, место будет освобождено, когда будет вызвана mysql_close().


Возвращает ID, сгенерированный предыдущим запросом для столбца с поддержкой AUTO_INCREMENT. Используйте эту функцию после того, как Вы выполнили запрос INSERT для таблицы, которая содержит поле AUTO_INCREMENT.
Обратите внимание, что mysql_insert_id() возвращает 0, если предыдущий запрос не генерирует значение AUTO_INCREMENT. Если Вы должны сохранить значение для последующего неспешного потребления убедитесь, что вызвали mysql_insert_id() немедленно после того запроса, который генерирует значение.
mysql_insert_id() модифицируется после инструкций INSERT и UPDATE, которые генерируют значение AUTO_INCREMENT, или установки значения столбца с помощью LAST_INSERT_ID(expr).
Также обратите внимание, что значение функции SQL LAST_INSERT_ID() всегда содержит самое последнее сгенерированное значение AUTO_INCREMENT, и оно не будет сброшено между запросами потому, что значение этой функции поддерживается сервером.


Просит, чтобы сервер уничтожил поток, определенный как pid.


Возвращает набор результатов, состоящий из имен баз данных на сервере, которые соответствуют простому регулярному выражению, определенному параметром wild. Здесь wild может содержать групповые символы % или _, или может быть NULL, чтобы соответствовать всем базам данных. Вызов mysql_list_dbs() подобен выполнению запроса SHOW databases [LIKE wild].
Вы должны освободить набор результатов с помощью mysql_free_result().


Возвращает набор результатов, состоящий из имен полей в данной таблице, которые соответствуют простому регулярному выражению, определенному параметром wild. Здесь wild может содержать групповые символы % или _, или может быть NULL, чтобы соответствовать всем полям. Вызов mysql_list_fields() подобен выполнению запроса SHOW COLUMNS FROM tbl_name [LIKE wild].
Обратите внимание, что рекомендуется, чтобы Вы использовали SHOW COLUMNS FROM tbl_name вместо mysql_list_fields().
Вы должны освободить набор результатов с помощью mysql_free_result().


Возвращает набор результатов, описывающий текущие потоки сервера. Это тот же самый вид информации, что и сообщаемый командой mysqladmin processlist или запросом SHOW PROCESSLIST.
Вы должны освободить набор результатов с помощью mysql_free_result().


Возвращает набор результатов, состоящий из имен таблиц в текущей базе данных, которые соответствуют простому регулярному выражению, определенному параметром wild. Здесь wild может содержать групповые символы % или _, или может быть NULL, чтобы соответствовать всем таблицам. Вызов mysql_list_tables() подобен выполнению запроса SHOW tables [LIKE wild].
Вы должны освободить набор результатов с помощью mysql_free_result().


Возвращает число столбцов в наборе результатов.
Обратите внимание, что Вы можете получать число столбцов из указателя набора результатов или от дескриптора подключения. Вы используете дескриптор подключения, если mysql_store_result() или mysql_use_result() возвращает NULL (и таким образом Вы не имеете никакого указателя набора результата). В этом случае Вы можете вызывать mysql_field_count() чтобы определить, должен или нет mysql_store_result() произвести непустой результат. Это позволяет программе пользователя выбрать соответствующее действие без того, чтобы знать, был или нет запрос SELECT (или SELECT-подобным). Пример, показанный ниже иллюстрирует, как это может быть выполнено.


Возвращает число строк в наборе результатов.
Использование mysql_num_rows() зависит от того, используете ли Вы mysql_store_result() или mysql_use_result(), чтобы получить набор результатов. Если Вы используете mysql_store_result(), mysql_num_rows() может быть вызван немедленно. Если Вы используете mysql_use_result(), mysql_num_rows() не будет возвращать правильное значение, пока все строки в наборе результатов не будут получены.


Может использоваться, чтобы установить дополнительные параметры связи и действует на поведение подключения. Эта функция может быть вызвана несколько раз, чтобы установить несколько параметров.
mysql_options() должна быть вызвана после mysql_init(), но перед mysql_connect() или mysql_real_connect().
Параметр option представляет собой опцию, которую Вы хотите устанавливать, arg задает значение для опции. Если опция целое число, то arg должен указывать на значение целого числа.
Возможные значения параметров:

Опция Тип аргумента Действие
MYSQL_OPT_CONNECT_TIMEOUT longword Время ожидания в секундах.
MYSQL_OPT_COMPRESS TMY_BOOL Использовать сжатый протокол клиент-сервер.
MYSQL_OPT_NAMED_PIPE TMY_BOOL Использовать именованные каналы, чтобы соединиться с сервером MySQL под NT.
MYSQL_INIT_COMMAND PCHAR Команда, чтобы выполнить при соединении с сервером MySQL. Будет автоматически выполнена при повторном соединении.
MYSQL_READ_DEFAULT_FILE PCHAR Читать параметры из указанного файла опций вместо my.cnf.
MYSQL_READ_DEFAULT_GROUP PCHAR Читать параметры из именованной группы из файла опций my.cnf или файла, определенного в MYSQL_READ_DEFAULT_FILE.

Обратите внимание, что группа client всегда читается, если Вы используете MYSQL_READ_DEFAULT_FILE или MYSQL_READ_DEFAULT_GROUP.
Определенная группа в файле опций может содержать следующие параметры:

connect_timeout Время ожидания в секундах. В Linux это время ожидания также используется для ожидания первого ответа.
compress Использовать сжатый протокол клиент-сервер.
database Соединиться с этой базой данных, если никакая база данных не была определена в команде подключения.
debug Опции для отладки.
host Имя сервера по умолчанию.
init-command Команда, чтобы выполнить при соединении с сервером MySQL. Будет автоматически заново выполнена при повторном соединении, если связь прервалась.
interactive-timeout Аналогично указанию опции CLIENT_INTERACTIVE в mysql_real_connect().
password Пароль по умолчанию.
pipe Использовать именованные каналы, чтобы соединиться с сервером MySQL, работая под NT.
port Порт по умолчанию.
return-found-rows Сообщить mysql_info() о том, что нужно возвратить найденные строки вместо модифицируемых строк при использовании UPDATE.
socket Сокет по умолчанию.
user Пользователь по умолчанию.

Обратите внимание, что timeout был заменен на connect_timeout, но timeout будет все еще работать некоторое время для совместимости.


Проверяет работает или нет подключение. В случае неработоспособности будет предпринято автоматическое переподключение.
Эта функция может использоваться клиентом, который долго простаивает, чтобы определить, закрыл или нет сервер подключение, и повторно соединиться с ним в случае необходимости.


Выполняет запрос SQL, указанный строкой с нулевым символом в конце. Запрос должен состоять из одиночной инструкции SQL. Вы не должны добавлять точку с запятой (;) или \g для завершения запроса.
mysql_query() не может использоваться для запросов, которые содержат двоичные данные, взамен Вы должны использовать mysql_real_query(). Двоичные данные могут содержать в себе символ \0, который mysql_query() интерпретирует как конец строки запроса. Если Вы хотите знать, возвратил ли запрос набор результатов или нет, Вы можете использовать mysql_field_count(), чтобы проверить это.


mysql_real_connect() пытается установить подключение с сервером MySQL, запущенным на машине host. mysql_real_connect() должен завершиться успешно прежде, чем Вы сможете выполнить любую из других функций API, за исключением mysql_get_client_info().
Параметры определены следующим образом:
  • Первый параметр должен быть адресом существующей структуры типа TMYSQL. Перед вызовом mysql_real_connect() Вы должны вызвать mysql_init(), чтобы инициализировать структуру TMYSQL. Вы можете изменять много параметров подключения через вызов mysql_options().
  • Значением host может быть имя или адрес IP. Если это NULL или строка localhost, выполняется подключение к локальной системе. Если OS поддерживает сокеты (Unix) или именованные каналы (Windows), именно они используются вместо стека протоколов TCP/IP, чтобы соединиться с сервером.
  • Аргумент user содержит ID пользователя MySQL. Если user равен NULL, предполагается текущий пользователь. Под Unix это текущее (актуальное) имя входа в систему. Под Windows ODBC имя пользователя должно быть определено явно!
  • Параметр passwd содержит пароль для user. Если passwd равен NULL, только записи в таблице user, которые имеют пустое поле пароля, будут проверены на соответствие. Это позволяет администратору базы данных устанавливать систему привилегий MySQL таким способом, которым пользователи получают различные привилегии в зависимости от того, определили или нет они пароль. ОБРАТИТЕ ВНИМАНИЕ: Не пытайтесь шифровать пароль перед вызовом mysql_real_connect(): шифрование пароля обработано автоматически.

  • db задает имя базы данных. Если db не NULL, подключение установит заданную по умолчанию базу данных.
  • Если port не равен 0, значение будет использоваться как номер порта для подключения по TCP/IP. Обратите внимание, что параметр host определяет тип подключения.
  • Если unix_socket не равен NULL, строка определяет сокет или именованный канал, который должен использоваться. Обратите внимание, что параметр host определяет тип подключения.
  • Значение client_flag как правило равно 0, но может быть установлено к комбинации из следующих флажков в специальных обстоятельствах:
    Имя флажка Что он делает
    CLIENT_COMPRESS Использовать протокол сжатия.
    CLIENT_FOUND_ROWS Возвратить число найденных, а не обработанных строк.
    CLIENT_IGNORE_SPACE Позволить использовать пробелы после имен функций. Делает все зарезервированные слова именами функций.
    CLIENT_INTERACTIVE Позволить interactive_timeout секунд (вместо wait_timeout секунд) бездеятельности перед закрытием подключения.
    CLIENT_NO_SCHEMA Не позволять синтаксис db_name.tbl_name.col_name. Это сделано для ODBC. Это заставляет синтаксический анализатор генерировать ошибку, если Вы используете тот синтаксис, который является полезным для заманивания в ловушку ошибок в некоторых программах ODBC.
    CLIENT_ODBC Работает клиент ODBC.
    CLIENT_SSL Использовать шифрованный протокол SSL.




  • Эта функция используется, чтобы создать допустимую строку, которую Вы можете использовать в инструкции SQL.
    Строка в from бужет закодирована до экранированной строки SQL, принимая во внимание текущий (актуальный) набор символов подключения. Результат будет помещен в to и завершающий байт пустого указателя допишется автоматически. Символы NUL (ASCII 0), \n, \r, \, ', ", а также Control-Z, будуь экранированы.
    Строка, указанная в from должна быть length байтов длины. Вы должны распределить буфер по крайней мере length*2+1 байт. В худшем случае каждый символ должен быть закодирован как использование двух байтов, и Вы нуждаетесь в участке памяти для завершающего байта пустого указателя. Когда mysql_escape_string() завершится, в to будет строка с нулевым байтом в конце. Значение возврата: длина закодированной строки, не включая символ завершения.


    Выполняет запрос SQL, указанный в query, который должен быть строкой длиной в length байт. Запрос должен состоять из одиночной инструкции SQL. Вы не должны добавлять точку с запятой (`;') или \g для завершения запроса.
    Вы должны использовать mysql_real_query() вместо mysql_query() для запросов, которые содержат двоичные данные, потому, что двоичные данные могут сами содержать символ \0. Кроме того, mysql_real_query() быстрее, чем mysql_query() потому, что не вызывает strlen().
    Если Вы хотите знать, возвратил ли запрос набор результатов или нет, Вы можете использовать mysql_field_count(), чтобы проверить это.

    Содержание раздела