Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π² LinuxΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 147

Автор ΠœΡΡ‚ΡŒΡŽ НСйл

Π£ΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ноль. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ эта ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для установки Ρ„Π»Π°Π³ΠΎΠ², Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ всСгда ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ использованиС Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

Для задания Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания, Ρ€Π°Π²Π½ΠΎΠ³ΠΎ сСми сСкундам, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

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 [email protected] 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>

Π’Π°ΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, придСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, установлСны Π»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ клиСнтской части ΠΈ мСсто ΠΈΡ… установки, зависящСС ΠΎΡ‚ примСняСмого Π²Π°ΠΌΠΈ дистрибутива, ΠΈ ΠΎΡ‚ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, соотвСтствСнно, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ строку компиляции.