Страница 149 из 324
В основном в случае функций mysql_ возврат 0 означает отсутствие измененных строк, а положительное значение указывает на реальный результат, обычно количество строк, затронутых оператором.
Сначала следует создать таблицу 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>
Теперь добавьте программный код в файл co
#include <stdlib.h>
#include <stdio.h>
#include "mysql.h"
int main(int argc, char *argv[]) {
MYSQL my_co
<i> int res;</i>
mysql_init(&my_co
if (mysql_real_co
"rick", "secret", "foo", 0, NULL, 0)) {
printf("Co
<i> res = mysql_query(&my_co
<i> "INSERT INTO children(fname, age) VALUES('A
<i> if (!res) {</i>
<i> printf("Inserted %lu rowsn",</i>
<i> (unsigned long)mysql_affected_rows(&my_co
<i> } else {</i>
<i> fprintf(stderr, "Insert error %d: %sn",</i>
<i> mysql_errno(&my_co
<i> }</i>
mysql_close(&my_co
} else {
fprintf(stderr, "Co
if (mysql_errno(&my_co
printf(stderr, "Co
mysql_errno(&my_co
}
}
return EXIT_SUCCESS;
}
Как и ожидалось, одна строка добавлена.
Теперь измените код, чтобы включить UPDATE вместо INSERT, и посмотрите на сообщение об измененных строках.
mysql_errno(&my_co
}
}
<i>res = mysql_query(&my_co
<i> "UPDATE children SET AGE = 4 WHERE fname = 'A
if (!res) {
printf("Updated %lu rowsn",
(unsigned long)mysql_affected_rows(&my_co
} else {
fprintf (stderr, "Update error %d: %sn",
mysql_errno(&my_co
}
Назовите эту программу update1.c. Она пытается задать возраст 4 года для всех детей с именем A
Предположим, что ваша таблица children содержит следующие данные:
mysql> <b>SELECT * from CHILDREN;</b>
+---------+--------+-----+
| childno | fname | age |
+---------+--------+-----+
| 1 | Je
| 2 | Andrew | 17 |
| 3 | Gavin | 9 |
| 4 | Duncan | 6 |
| 5 | Emma | 4 |
| 6 | Alex | 15 |
| 7 | Adrian | 9 |
| 8 | A
| 9 | A
| 10 | A
| 11 | A
+---------+--------+-----+
11 rows in set (0.00 sec)
В вашей таблице есть четыре ребенка с именем A