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

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

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

 database_start("rick", "secret");

Π”Π°Π»Π΅Π΅ тСстируСтся Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска:

 res = add_cd("Mahler", "Symphony No 1", "4596102", &cd_id);

 printf("Result of adding a cd was %d, cd_id is %d\n", res, cd_id);

 memset(&ct, 0, sizeof(ct));

 ct.cd_id = cd_id;

 strcpy(ct.track[0], "Langsam Schleppend");

 strcpy(ct.track[1], "Kraftig bewegt");

 strcpy(ct.track[2], "Feierlich und gemessen");

 strcpy(ct.track[3], "StΓΌrmisch bewegt");

 add_tracks(set);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΈΡ‰ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диск ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ CD:

 res = find_cds("Symphony", &cd_res);

 printf("Found %d cds, first has ID %d\n", res, cd_res.cd_id[0]);

 res = get_cd(cd_res.cd_id[0], &cd);

 printf("get_cd returned %d\n", res);

 memset(&ct, 0, sizeof(ct));

 res = get_cd_tracks(cd_res.cd_id[0], set);

 printf("get_cd_tracks returned %d\n", res);

 printf("Title: %s\n", cd.title);

 i = 0;

 while (i < res) {

  printf("\ttrack %d is %s\n", i, ct.track[i]);

  i++;

 }

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диск:

 res = delete_cd(cd_res.cd_id[0]);

 printf("Delete_cd returned %d\n", res);

Π—Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

 database_end();

 return EXIT_SUCCESS;

}

РСализация интСрфСйса

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΠΎΠ»Π΅Π΅ трудная Ρ‡Π°ΡΡ‚ΡŒ β€” рСализация интСрфСйса, описанного Π²Π°ΠΌΠΈ. Вся ΠΎΠ½Π° хранится Π² Ρ„Π°ΠΉΠ»Π΅ app_mysql.с.

НачнитС с основных Ρ„Π°ΠΉΠ»ΠΎΠ² include, глобальной структуры ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, которая понадобится, ΠΈ Ρ„Π»Π°Π³Π° dbconnected, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ прилоТСния Π½Π΅ ΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, Ссли Ρƒ Π½ΠΈΡ… Π½Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ get_artist_id, для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#include "mysql.h"

#include "app_mysql.h"


static MYSQL my_connection;

static int dbconnected = 0;

static int get_artist_id(char *artist);

Как Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‡Π΅Π½ΡŒ просто, Π° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Π΅ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅:

int database_start(char *name, char *pwd) {

 if (dbconnected) return 1;

 mysql_init(&my_connection);

 if (!mysql_real_connect(&my_connection, "localhost",

  name, pwd, "blpcd", 0, NULL, 0)) {

  fprintf(stderr, "Database connection failure: %d, %s\n",

   mysql_errno(&my_connection), mysql_error(&my_connection));

  return 0;

 }

 dbconnected = 1;

 return 1;

} /* database_start */


void database_end() {

 if (dbconnected) mysql_close(&my_connection);

 dbconnected = 0;

} /* database_end */

НачинаСтся Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° благодаря Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ add_cd. Π’Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ сначала нСсколько объявлСний ΠΈ санитарная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π΅Π΅ Π²ΠΎ всСх написанных функциях, доступных ΠΈΠ·Π²Π½Π΅.

НапоминаСм ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° исполнитСлСй автоматичСски:

int add_cd(char *artist, char *title, char* catalogue, int *cd_id) {

 MYSQL_RES *res_ptr;

 MYSQL_ROW mysqlrow;

 int res;

 char is[250];

 char es[250];

 int artist_id = -1;

 int new_cd_id = -1;

 if (!dbconnected) return 0;

Π”Π°Π»Π΅Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, сущСствуСт Π»ΠΈ ΡƒΠΆΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ, Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ. Обо всСм этом заботится функция get_artist_id, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ скоро ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅:

 artist_id = get_artist_id(artist);

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, имСя artist_id, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π³Π»Π°Π²Π½ΡƒΡŽ запись ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mysql_escape_string, Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅ΠΉ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов Π² Π½Π°Π·Π²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска.

 mysql_escape_string(es, title, strlen(title));

 sprintf(is,

  "INSERT INTO cd(title, artist_id, catalogue) VALUES('%s', %d, '%s')",

  es, artist_id, catalogue);

 res = mysql_query(&my_connection, is);

 if (res) {

  fprintf(stderr, "Insert error %d: %s\n",

   mysql_errno(&my_connection), mysql_error(&my_connection));

  return 0;

 }

Когда Π²Ρ‹ Π΄ΠΎΠΉΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ вставки Π΄ΠΎΡ€ΠΎΠΆΠ΅ΠΊ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска, Π²Π°ΠΌ потрСбуСтся Π·Π½Π°Ρ‚ΡŒ ID, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ использовался ΠΏΡ€ΠΈ вставкС записи ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС. Π’Ρ‹ сдСлали ΠΏΠΎΠ»Π΅ автоматичСски Π½Π°Ρ€Π°Ρ‰ΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ, поэтому Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… автоматичСски присвоила ID, Π½ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ явно ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Как Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Ρ€Π°Π½Π΅Π΅ Π² этой Π³Π»Π°Π²Π΅, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ LAST_INSERT_ID.

 res = mysql_query(&my_connection, "SELECT LAST_INSERT_ID()");

 if (res) {

  printf("SELECT error: %s\n", mysql_error(&my_connection));

  return 0;

 } else {

  res_ptr = mysql_use_result(&my_connection);

  if (res_ptr) {

   if ((mysqlrow = mysql_fetch_row(res_ptr))) {

    sscanf(mysqlrow[0], "%d", &new_cd_id);

   }

   mysql_free_result(res_ptr);

  }

He стоит Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Ρ…, Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диски Π² это ΠΆΠ΅ врСмя, ΠΈ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ID; Π‘Π£Π Π‘Π” MySQL Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ присвоСнный ID для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, поэтому, Π΄Π°ΠΆΠ΅ Ссли Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ вставило ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диск ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Π²Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ»ΠΈ ID, Π²Ρ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ вашСй строкС, Π° Π½Π΅ строкС, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

И послСднСС, Π½ΠΎ Π½Π΅ ΠΏΠΎ стСпСни ваТности, установитС ID вновь Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ строки ΠΈ Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ΄ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ:

  *cd_id = new_cd_id;

  if (new_cd_id != -1) return 1;

  return 0;

 }

} /* add_cd */

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотритС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ get_artist_id; процСсс ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° вставку записи ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС:

/* Поиск ΠΈΠ»ΠΈ созданиС artist_id для Π·Π°Π΄Π°Π½Π½ΠΎΠΉ строки */

static int get_artist_id(char *artist) {

 MYSQL_RES *res_ptr;

 MYSQL_ROW mysqlrow;

 int res;

 char qs[250];

 char is[250];

 char es[250];

 int artist_id = -1;

 /* Он ΡƒΠΆΠ΅ сущСствуСт? */

 mysql_escape string(es, artist, strlen(artist));

 sprintf(qs, "SELECT id FROM artist WHERE name = '%s'", es);

 res = mysql_query(&my_connection, qs);

 if (res) {

  fprintf(stderr, "SELECT error: %s\n", mysql_error(&my_connection));

 } else {

  res_ptr = mysql_store_result(&my_connection);

  if (res_ptr) {

   if (mysqr_num_rows(res_ptr) > 0) {

    if (mysqlrow = mysql_fetch_row(res_ptr)) {

     sscanf(mysqlrow[0], "%d", &artist_id);

    }

   }

   mysql_free_result(res_ptr);

  }

 }

 if (artist_id != -1) return artist_id;

 sprintf(is, "INSERT INTO artist(name) VALUES ('%s')", es);

 res = mysql_query(&my_connection, is);

 if (res) {

  fprintf(stderr, "Insert error %d: %s\n",

   mysql_errno(&my_connection), mysql_error(&my_connection));

  return 0;

 }

 res = mysql_query(&my_connection, "SELECT LAST_INSERT_ID()");

 if (res) {

  printf("SELECT error: %s\n", mysql_error(&my_connection));

  return 0;

 } else {

  res_ptr = mysql_use_result(&my_connection);

  if (res_ptr) {

   if ((mysqlrow = mysql_fetch_row(res_ptr))) {

    sscanf(mysqlrow[0], "%d", &artist_id);

   }

   mysql_free_result(res_ptr);

  }

 }

 return artist_id;

} /* get_artist_id */

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ вставкС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π΄ΠΎΡ€ΠΎΠΆΠΊΠ°Ρ… для вашСго ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-диска. И снова Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚Π΅ΡΡŒ ΠΎΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов Π² названиях Π΄ΠΎΡ€ΠΎΠΆΠ΅ΠΊ:

int add_tracks(struct current_tracks_st *tracks) {

 int res;

 char is[250];

 char es[250];

 int i;

 if (!dbconnected) return 0;

 i = 0;

 while (tracks->track[i][0]) {

  mysql_escape_string(es, tracks->track[i], strlen(tracks->track[i]));

  sprintf(is,

   "INSERT INTO track(cd_id, track_id, title) VALUES(%d, %d, '%s')",

  tracks->cd_id, i + 1, es);

  res = mysql_query(&my_connection, is);

  if (res) {

   fprintf(stderr, "Insert error %d: %s\n",

   mysql_errno(&my_connection), mysql_error(&my_connection));

   return 0;

  }

  i++;

 }

 return 1;

} /* add tracks */

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ ΠΊ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚-дискС с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ ID. Π‘ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° опСрация объСдинСния Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… для извлСчСния ID исполнитСля Π²ΠΎ врСмя получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ± ID диска. Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄: систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Π·Π½Π°ΡŽΡ‚, ΠΊΠ°ΠΊ эффСктивно Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ слоТныС запросы, поэтому Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΏΠΎΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π‘Π£Π Π‘Π”, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΉ запрос Π½Π° языкС SQL. Π•ΡΡ‚ΡŒ шанс ΡΠ±Π΅Ρ€Π΅Ρ‡ΡŒ собствСнныС силы, Π½Π΅ тратя ΠΈΡ… Π½Π° написаниС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ эффСктивно, Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΠ² Π‘Π£Π Π‘Π” Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ объСм Ρ€Π°Π±ΠΎΡ‚Ρ‹.

int get_cd(int cd_id, struct current_cd_st *dest) {

 MYSQL_RES *res_ptr;

 MYSQL_ROW mysqlrow;

 int res;

 char qs[250];

 if (!dbconnected) return 0;

 memset(dest, 0, sizeof(*dest));

 dest->artist_id = -1;

 sprintf(qs, "SELECT artist.id, cd.id, artist.name, cd.title, cd.catalogue \

  FROM artist, cd WHERE artist.id = cd.artist_id and cd.id = %d", cd_id);

 res = mysql_query(&my_cormection, qs);