Доступ обеспечиваеся с помощью переменной типа MYSQL*;
Для начала нужно ее инициализировать :
MYSQL* conn = mysql_init(NULL);
mysql_init в
ыделяет или инициализирует объект MYSQL, подходящий для функции mysql_real_connect()
. Если аргумент mysql
представляет собой указатель NULL
, то эта функция выделяет, инициализирует и возвращает новый объект. В противном случае инициализируется указанный объект и возвращается его адрес. Если функция mysql_init()
выделяет новый объект, то он будет освобожден при вызове функции mysql_close()
, чтобы закрыть данное соединение.
Далее необходимо открыть соединение(mysql_connect лучше не использовать):
mysql_real_connect(conn, "host", "user", "pass", "database", 0, NULL, 0);
Для успешного соединения возвращаемая величина та же, что и величина первого параметра.
Функция mysql_real_connect()
пытается установить соединение с сервером баз данных MySQL, работающим на хосте host
. До успешного завершения функции mysql_real_connect()
нельзя выполнять никакие другие функции интерфейса, за исключением mysql_get_client_info()
.
Теперь можно обращаться к базе данных с помощью mysql_query:
mysql_query(conn, "SELECT * FROM foo");
Выполняет запрос SQL, указанный в аргументе
query
в виде строки с нулевыми окончаниями. Данный запрос должен состоять из одной команды SQL. Нельзя добавлять к этой команде в качестве завершающих элементов точку с запятой (
`;') или
\g
.
Функция
mysql_query()
не может использоваться для запросов, содержащих двоичные данные; вместо этого необходимо использовать функцию
mysql_real_query()
(двоичные данные могут содержать символ
`\0', который
mysql_query()
интерпретирует как окончание строки запроса).
Для проверки, вернул данный запрос результирующий набор или нет, можно использовать функцию
mysql_field_count().
Для получения результата запроса(когда запрос вида
SELECT
, SHOW
,DESCRIBE
, EXPLAIN
) используется
MYSQL_RES *result = mysql_store_result(conn) или
MYSQL_RES *result = mysql_use_result(conn).
Функция mysql_store_result()
читает весь результат запроса данного клиента, выделяет структуру MYSQL_RES
и помещает результат в эту структуру.
Функция
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(result);
Освобождает память, выделенную для результирующего набора данных функциями mysql_store_result()
, mysql_use_result()
, mysql_list_dbs()
и т.д. После выполнения операций с результирующим набором необходимо освободить используемую под него память вызовом функции mysql_free_result()
.
В конце надо закрыть соединение:
mysql_close(conn);
Закрывает ранее открытое соединение. Функция mysql_close()
также освобождает дескриптор данного соединения, указанный в mysql
, если данный дескриптор был выделен автоматически функциями mysql_init()
или mysql_connect()
.
Взята куча данных с http://mysql.ru/docs/man/C_API_functions.html