Подпрограмма mysql_options(которую можно вызвать только между вызовами mysql_initи mysql_real_connect) позволит настроить некоторые параметры.
int mysql_options(MYSQL* connection, enum option_to_set, const char *argument);
Поскольку при каждом вызове mysql_optionsспособна настроить только один параметр, ее следует вызывать отдельно для каждого параметра, который нужно задать. Вы можете применять эту подпрограмму необходимое количество раз, но все вызовы должны находиться между вызовами подпрограмм mysql_initи mysql_real_connect. Не все параметры подпрограммы имеют тип char, который следует приводить как const char*. Три самых часто используемых параметра приведены в табл. 8.11. И как всегда в расширенном интерактивном руководстве приведен полный список параметров.
Таблица 8.11
Enum-параметр |
Действительный тип аргумента |
Описание |
MYSQL_ОРТ_CONNECT_TIMEOUT |
const unsigned int* |
Количество секунд ожидания перед закрытием подключения из-за простоя |
MYSQL_ОРТ_COMPRESS |
Нет, используйте NULL |
Применять сжатие при сетевом подключении |
MYSQL_INIT_COMMAND |
const char* |
Команда, отправляемая при каждом установлении подключения |
Успешный вызов возвращает ноль. Поскольку эта подпрограмма предназначена для установки флагов, аварийное завершение всегда означает использование неверного параметра.
Для задания времени ожидания, равного семи секундам, используйте следующий фрагмент программного кода:
unsigned int timeout = 7;
...
connection = mysql_init(NULL);
ret = mysql_options(connection, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&timeout);
if (ret) {
/* Обработка ошибки */
...
}
connection = mysql_real_connect(connection ...)
Теперь, когда вы научились устанавливать, и закрывать ваше подключение, попробуем с помощью короткой программы проверить полученные знания на практике.
Начните с задания нового пароля для пользователя (в приведенном далее коде rickна localhost) и затем создайте базу данных foo, к которой будете подключаться. Вы все это уже знаете, поэтому мы просто приводим последовательность действий:
$ mysql -u root -р
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> GRANT ALL ON *.* TO rick@localhost IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.01 sec)
mysql> \q
Bye
$ mysql -u rick -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> CREATE DATABASE foo;
Query OK, 1 row affected (0.01 sec)
mysql> \q
Вы создали новую базу данных. Вместо ввода подробностей создания таблицы и вставки команд непосредственно в командную строку монитора mysql, что сопряжено с ошибками и не слишком продуктивно при необходимости повторного ввода, вы создадите файл со всеми нужными вам командами.
Далее приведен файл create_children.sql:
--
-- Create the table children
--
CREATE TABLE children (
childno int(11) NOT NULL auto_increment,
fname varchar(30),
age int(11),
PRIMARY KEY (childno)
);
--
--Populate the table 'children'
--
INSERT INTO children(childno, fname, age) VALUES (1,'Jenny',21);
INSERT INTO children(childno, fname, age) VALUES (2,'Andrew',17);
INSERT INTO children(childno, fname, age) VALUES (3,'Gavin',8);
INSERT INTO children(childno, fname, age) VALUES (4,'Duncan', 6);
INSERT INTO children(childno, fname, age) VALUES (5,'Emma',4);
INSERT INTO children(childno, fname, age) VALUES (6,'Alex',15);
INSERT INTO children(childno, fname, age) VALUES (7,'Adrian',9);
Теперь вы можете снова зарегистрироваться в MySQL, выбрав базу данных foo, и выполнить данный файл. Для краткости и как пример для включения при желании в сценарий мы поместили пароль в командную строку:
$ mysql -u rick --password=secret foo
Welcome to the MySQL monitor. Commands end with ; or \g.
mysql> \. create_children.sql
Query OK, 0 rows affected (0.01 sec)
Query OK, 1 row affected (0.00 sec)
Мы убрали из вывода множество дублирующихся строк, например, строки, созданные в базе данных. Теперь, имея пользователя, базу данных и таблицу с хранящимися данными, самое время посмотреть, как обращаться к данным из программы.
Далее приведен файл connect1.с, который подключается от имени пользователя rick с паролем secretк серверу на локальной машине и базе данных foo.
#include
#include
#include "mysql.h"
int main(int argc, char *argv[]) {
MYSQL *conn_ptr;
conn_ptr = mysqlinit(NULL);
if (!conn_ptr) {
fprintf(stderr, "mysql_init failed\n");
return EXIT_FAILURE;
Читать дальше