Добавить в цитаты Настройки чтения

Страница 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&gt; <b>DROP TABLE children;</b>

Query OK, 0 rows affected (0.58 sec)

mysql&gt; <b>CREATE TABLE children (</b>

    -&gt; <b>childno int(11) AUTO_INCREMENT NOT NULL PRIMARY KEY,</b>

    -&gt; <b>fname varchar(30),</b>

    -&gt; <b>age int</b>

    -&gt; <b>);</b>

Query OK, 0 rows affected (0.09 sec)

mysql&gt;

Теперь добавьте программный код в файл co

#include &lt;stdlib.h&gt;

#include &lt;stdio.h&gt;

#include &quot;mysql.h&quot;

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

 MYSQL my_co

<i> int res;</i>

 mysql_init(&amp;my_co

 if (mysql_real_co

  &quot;rick&quot;, &quot;secret&quot;, &quot;foo&quot;, 0, NULL, 0)) {

  printf(&quot;Co

<i>  res = mysql_query(&amp;my_co

<i>   &quot;INSERT INTO children(fname, age) VALUES('A

<i>  if (!res) {</i>

<i>   printf(&quot;Inserted %lu rowsn&quot;,</i>

<i>    (unsigned long)mysql_affected_rows(&amp;my_co

<i>  } else {</i>

<i>   fprintf(stderr, &quot;Insert error %d: %sn&quot;,</i>

<i>    mysql_errno(&amp;my_co

<i>  }</i>

  mysql_close(&amp;my_co

 } else {

  fprintf(stderr, &quot;Co

  if (mysql_errno(&amp;my_co

   printf(stderr, &quot;Co

    mysql_errno(&amp;my_co

  }

 }

 return EXIT_SUCCESS;

}

Как и ожидалось, одна строка добавлена.

Теперь измените код, чтобы включить UPDATE вместо INSERT, и посмотрите на сообщение об измененных строках.

  mysql_errno(&amp;my_co

 }

}

<i>res = mysql_query(&amp;my_co

<i> &quot;UPDATE children SET AGE = 4 WHERE fname = 'A

if (!res) {

 printf(&quot;Updated %lu rowsn&quot;,

  (unsigned long)mysql_affected_rows(&amp;my_co

} else {

 fprintf (stderr, &quot;Update error %d: %sn&quot;,

  mysql_errno(&amp;my_co

}

Назовите эту программу update1.c. Она пытается задать возраст 4 года для всех детей с именем A

Предположим, что ваша таблица children содержит следующие данные:

mysql&gt; <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