Успешный вызов возвращает ноль. Поскольку эта подпрограмма предназначена для установки флагов, аварийное завершение всегда означает использование неверного параметра.
Для задания времени ожидания, равного семи секундам, используйте следующий фрагмент программного кода:
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 ...)Теперь, когда вы научились устанавливать, и закрывать ваше подключение, попробуем с помощью короткой программы проверить полученные знания на практике.
Начните с задания нового пароля для пользователя (в приведенном далее коде
ricklocalhostfoo$ <b>mysql -u root -р</b>Enter password:Welcome to the MySQL monitor. Commands end with ; or \g.mysql> <b>GRANT ALL ON *.* TO [email protected] IDENTIFIED BY 'secret';</b>Query OK, 0 rows affected (0.01 sec)mysql> <b>\q</b>Bye$ <b>mysql -u rick -p</b>Enter password:Welcome to the MySQL monitor. Commands end with ; or \g.mysql> <b>CREATE DATABASE foo;</b>Query OK, 1 row affected (0.01 sec)mysql> <b>\q</b>Вы создали новую базу данных. Вместо ввода подробностей создания таблицы и вставки команд непосредственно в командную строку монитора 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, и выполнить данный файл. Для краткости и как пример для включения при желании в сценарий мы поместили пароль в командную строку:
$ <b>mysql -u rick --password=secret foo</b>Welcome to the MySQL monitor. Commands end with ; or \g.mysql> <b>\. create_children.sql</b>Query OK, 0 rows affected (0.01 sec)Query OK, 1 row affected (0.00 sec)Мы убрали из вывода множество дублирующихся строк, например, строки, созданные в базе данных. Теперь, имея пользователя, базу данных и таблицу с хранящимися данными, самое время посмотреть, как обращаться к данным из программы.
Далее приведен файл connect1.с, который подключается от имени пользователя rick с паролем
secretfoo#include <stdlib.h>#include <stdio.h>#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; } conn_ptr = mysql_real_connect(conn_ptr, "localhost", "rick", "secret", "foo", 0, NULL, 0); if (conn_ptr) { printf("Connection success\n"); } else { printf ("Connection failed\n"); } mysql_close(conn_ptr); return EXIT_SUCCESS;}Теперь откомпилируйте программу и посмотрите, как вы это сделали. Возможно, придется вставить путь к файлам
includemysqlclient-lz$ <b>gcc -I/usr/include/mysql connect1.с -L/usr/lib/mysql -lmysqlclient -о connect1</b>Вам, возможно, придется проверить, установлены ли пакеты клиентской части и место их установки, зависящее от применяемого вами дистрибутива, и откорректировать, соответственно, приведенную строку компиляции.