Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
В основном в случае функций
mysql_
Сначала следует создать таблицу
children
foo
drop
AUTO_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;
}
Как и ожидалось, одна строка добавлена.
Теперь измените код, чтобы включить
UPDATE
INSERT
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.
Предположим, что ваша таблица
children
mysql> <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 количество измененных строк будет равно четырем, т.е. числу строк, отбираемых по условию
WHERE
CLIENT_FOUND_ROWS
mysql_real_connect