Основы программирования в Linux - Мэтью Нейл
В основном в случае функций
mysql_Сначала следует создать таблицу
childrenfoodropAUTO_INCREMENT$ <b>mysql -u rick -p foo</b>Enter password:Welcome to the MySQL monitor. Commands end with ; or g.mysql> <b>DROP TABLE children;</b>Query OK, 0 rows affected (0.58 sec)mysql> <b>CREATE TABLE children (</b> -> <b>childno int(11) AUTO_INCREMENT NOT NULL PRIMARY KEY,</b> -> <b>fname varchar(30),</b> -> <b>age int</b> -> <b>);</b>Query OK, 0 rows affected (0.09 sec)mysql>Теперь добавьте программный код в файл connect2.c, для того чтобы вставить новую строку в вашу таблицу. Назовите эту новую программу insert1.с. Учтите, что разбиение оператора на несколько строк объясняется физической шириной страницы; обычно вы не должны разбивать реальный SQL-оператор, если он не слишком длинный, в этом случае можно применить символ
/#include <stdlib.h>#include <stdio.h>#include "mysql.h"int main(int argc, char *argv[]) { MYSQL my_connection;<i> int res;</i> mysql_init(&my_connection); if (mysql_real_connect(&my_connection, "localhost", "rick", "secret", "foo", 0, NULL, 0)) { printf("Connection successn");<i> res = mysql_query(&my_connection,</i><i> "INSERT INTO children(fname, age) VALUES('Ann', 3)");</i><i> if (!res) {</i><i> printf("Inserted %lu rowsn",</i><i> (unsigned long)mysql_affected_rows(&my_connection));</i><i> } else {</i><i> fprintf(stderr, "Insert error %d: %sn",</i><i> mysql_errno(&my_connection), &mysql_error(&my_connection));</i><i> }</i> mysql_close(&my_connection); } else { fprintf(stderr, "Connection failedn"); if (mysql_errno(&my_connection)) { printf(stderr, "Connection error %d: %sn", mysql_errno(&my_connection), mysql_error(&my_connection)); } } return EXIT_SUCCESS;}Как и ожидалось, одна строка добавлена.
Теперь измените код, чтобы включить
UPDATEINSERT mysql_errno(&my_connection), mysql_error(&my_connection)); }}<i>res = mysql_query(&my_connection,</i><i> "UPDATE children SET AGE = 4 WHERE fname = 'Ann'");</i>if (!res) { printf("Updated %lu rowsn", (unsigned long)mysql_affected_rows(&my_connection));} else { fprintf (stderr, "Update error %d: %sn", mysql_errno(&my_connection), mysql_error(&my_connection));}Назовите эту программу update1.c. Она пытается задать возраст 4 года для всех детей с именем Ann.
Предположим, что ваша таблица
childrenmysql> <b>SELECT * from CHILDREN;</b>+---------+--------+-----+| childno | fname | age |+---------+--------+-----+| 1 | Jenny | 21 || 2 | Andrew | 17 || 3 | Gavin | 9 || 4 | Duncan | 6 || 5 | Emma | 4 || 6 | Alex | 15 || 7 | Adrian | 9 || 8 | Ann | 3 || 9 | Ann | 4 || 10 | Ann | 3 || 11 | Ann | 4 |+---------+--------+-----+11 rows in set (0.00 sec)В вашей таблице есть четыре ребенка с именем Ann. Вы можете рассчитывать на то, что при выполнении программы update1 количество измененных строк будет равно четырем, т.е. числу строк, отбираемых по условию
WHERECLIENT_FOUND_ROWSmysql_real_connect