Литмир - Электронная Библиотека
Содержание  
A
A

Успешный вызов возвращает ноль. Поскольку эта подпрограмма предназначена для установки флагов, аварийное завершение всегда означает использование неверного параметра.

Для задания времени ожидания, равного семи секундам, используйте следующий фрагмент программного кода:

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
, к которой будете подключаться. Вы все это уже знаете, поэтому мы просто приводим последовательность действий:

$ <b>mysql -u root -р</b>

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

mysql&gt; <b>GRANT ALL ON *.* TO rick@localhost IDENTIFIED BY 'secret';</b>

Query OK, 0 rows affected (0.01 sec)

mysql&gt; <b>\q</b>

Bye

$ <b>mysql -u rick -p</b>

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

mysql&gt; <b>CREATE DATABASE foo;</b>

Query OK, 1 row affected (0.01 sec)

mysql&gt; <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&gt; <b>\. create_children.sql</b>

Query OK, 0 rows affected (0.01 sec)

Query OK, 1 row affected (0.00 sec)

Мы убрали из вывода множество дублирующихся строк, например, строки, созданные в базе данных. Теперь, имея пользователя, базу данных и таблицу с хранящимися данными, самое время посмотреть, как обращаться к данным из программы.

Далее приведен файл connect1.с, который подключается от имени пользователя rick с паролем

secret
к серверу на локальной машине и базе данных
foo
.

#include &lt;stdlib.h&gt;

#include &lt;stdio.h&gt;

#include &quot;mysql.h&quot;

int main(int argc, char *argv[]) {

 MYSQL *conn_ptr;

 conn_ptr = mysqlinit(NULL);

 if (!conn_ptr) {

  fprintf(stderr, &quot;mysql_init failed\n&quot;);

  return EXIT_FAILURE;

 }

 conn_ptr = mysql_real_connect(conn_ptr, &quot;localhost&quot;, &quot;rick&quot;, &quot;secret&quot;,

  &quot;foo&quot;, 0, NULL, 0);

 if (conn_ptr) {

  printf(&quot;Connection success\n&quot;);

 } else {

  printf (&quot;Connection failed\n&quot;);

 }

 mysql_close(conn_ptr);

 return EXIT_SUCCESS;

}

Теперь откомпилируйте программу и посмотрите, как вы это сделали. Возможно, придется вставить путь к файлам

include
и путь к библиотекам, а также указать, что файл нуждается в компоновке с библиотечным модулем
mysqlclient
. В некоторых системах может понадобиться опция
-lz
для компоновки с библиотекой упаковки (compression library). В системе авторов требуемая строка компиляции выглядит следующим образом:

$ <b>gcc -I/usr/include/mysql connect1.с -L/usr/lib/mysql -lmysqlclient -о connect1</b>

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

147
{"b":"285844","o":1}