[LinuxFocus-icon]
<--  | �����  | �����  | ������  | �����

������� | ������ | ������ | ��� LF
��� �������� �������� �� ��������� ������: English  Castellano  ChineseGB  Deutsch  Francais  Nederlands  Portugues  Russian  Turkce  Polish  

Ozcan Gungor
����� Özcan Güngör
<ozcangungor(at)netscape.net>

�� ������:
� ��������� Linux � 1997 �. �������, ��������������� � �������� ��� - ��� ������ �� ��������, ������� ��� ��������.

������� �� �������:
Pukhlyakov Kirill <kirill(at)linuxfocus.org>

����������:

 

MySQL C API

mysql logo

������:

� ���� ������� � �������� ��� ������������ C API, ������������ � MySQL. ����� ������ � ��� ���� ���� � �������, ���������� ��������� ������:

  • ���������� � C
  • ������� � C
  • ��������� � C

_________________ _________________ _________________

 

��������

C API ���������������� � MySQL � ������ � ���������� mysqlclient. ���������� API - ����������� � ���� � ���������� ��������. ��������� ������� ������������� �������� � �������� clients.  

���� ���������� � MySQL C

��������� ���������� ���������� � ���������� MySQL. ��� ���������� ��� ������������� ������� MySQL. ��� �������� �������, �� ��� �� ����� ������� ��� ��������� ����.

MYSQL
��� ��������� ������������ ��� ����������� � ����.

typedef struct st_mysql {
  NET           net;            /* Communication parameters */
  gptr          connector_fd;   /* ConnectorFd for SSL */
  char          *host,*user,*passwd,*unix_socket,
                *server_version,*host_info,*info,*db;
  unsigned int  port,client_flag,server_capabilities;
  unsigned int  protocol_version;
  unsigned int  field_count;
  unsigned int  server_status;
  unsigned long thread_id;      /* Id for connection in server */
  my_ulonglong affected_rows;
  my_ulonglong insert_id;       /* id if insert on table with NEXTNR */
  my_ulonglong extra_info;              /* Used by mysqlshow */
  unsigned long packet_length;
  enum mysql_status status;
  MYSQL_FIELD   *fields;
  MEM_ROOT      field_alloc;
  my_bool       free_me;        /* If free in mysql_close */
  my_bool       reconnect;      /* set to 1 if automatic reconnect */
  struct st_mysql_options options;
  char          scramble_buff[9];
  struct charset_info_st *charset;
  unsigned int  server_language;
} MYSQL;



MYSQL_RES
��� ��������� ������������ ���������� �������, ���������� ������ ��������. ������������ ������ ���������� result-set.

typedef struct st_mysql_res {
  my_ulonglong row_count;
  unsigned int  field_count, current_field;
  MYSQL_FIELD   *fields;
  MYSQL_DATA    *data;
  MYSQL_ROWS    *data_cursor;
  MEM_ROOT      field_alloc;
  MYSQL_ROW     row;            /* If unbuffered read */
  MYSQL_ROW     current_row;    /* buffer to current row */
  unsigned long *lengths;       /* column lengths of current row */
  MYSQL         *handle;        /* for unbuffered reads */
  my_bool       eof;            /* Used my mysql_fetch_row */
} MYSQL_RES;



MYSQL_ROW
��� ��� ���� ��������� ��� ������������� ������. �� �� �� ������ ������������ �� ��� ������, ��������������� ������� ��������, ������, ��� ������ ����� ���� �������� � ����� ��������� ���� ������.

typedef struct st_mysql_field {
  char *name;                   /* Name of column */
  char *table;                  /* Table of column if column was a field */
  char *def;                    /* Default value (set by mysql_list_fields) */
  enum enum_field_types type;   /* Type of field. Se mysql_com.h for types */
  unsigned int length;          /* Width of column */
  unsigned int max_length;      /* Max width of selected set */
  unsigned int flags;           /* Div flags */
  unsigned int decimals;        /* Number of decimals in field */
} MYSQL_FIELD;


my_ulonglong
���� ��� ������������ ��� ����� ������� � ������� ���: ���������� ����� mysql_affected_rows(), mysql_num_rows(), � mysql_insert_id(). �������� ����� ����: �� 0 �� 1.84e19. � ��������� �������� �� �� ������� ������� �������� ����� ���� ( my_ulonglong ), ����� ������� ��� ��� �������� �������� ��� �������� � ���� unsigned long � ������������ ������ %lu ������� printf. ��������:
printf(���������� �����: %lu\n", (unsigned long) mysql_num_rows(result));

typedef unsigned long my_ulonglong;

 

����������� � MySQL � ���������� �������

����, �����������, ��� MySQL �����������, ������� ������������ � ������� ������� � �������. ���� � ��� �������� �����-������ ������� ��� �������� � ����� ��������� - ���������� �� ���� http://www.mysql.com/.

��� �� ��� ������, MySQL ������� ��������� � ���������� mysqlclient. �������, ��� ���������� ����������, ����������������� � MySQL, ���������� �������� ����� -lmysqlclient. ������������ ����� MySQL ��������� � �������� /usr/include/mysql ( ������� ������� �� ������ ������������ Linux ). ��������� ������ ���������� ������ ��������� ��������� �������:

#include <mysql/mysql.h>

������� � ���������� MySQL ���������� � ���� ������������ �����.

�����, ���������� ������� ���������� ��� ����������� � ���� ������. ��� ���������� ������ � �������� ��������� �������:

MYSQL *mysql;

����� ���������������� ������������ � ���� ������ ���������� ������� ��������� ������� ��� ������������� ���������� mysql:

mysql_init(MYSQL *mysql)

����� ���������� �������

MYSQL * STDCALL mysql_real_connect(MYSQL *mysql,
                                   const char *host,
                                   const char *user,
                                   const char *passwd,
                                   const char *db,
                                   unsigned int port,
                                   const char *unix_socket,
                                   unsigned int clientflag);

��� �����������. host - ��� ���������� � ���������� �������� MySQL, user - ������������, ������� �� ����� ������������, passwd - ������, db - ���� ������, � ������� �� ����� ������������, port - ����� TCP/IP �����, unix_socket - ��� ����������, clientflag - ����, ����������� MySQL �������� ������� ODBC. � ������ ������� ��� ����� ��������� ��������� �������� 0. ��� ������� ���������� 0 � ������ ��������� ����������.

������ �� ����� ������������ � ���� ������ � ��������� ������:

char *query;

��������� ��� ������ �� ����� ������� ����� SQL ������. ������� ��� ���������� �������:

int STDCALL mysql_real_query(MYSQL *mysql,
                             const char *q,
                             unsigned int length);
mysql - ����������, ������� �� �������, q - ������ SQL �������, length - ����� ���� ������. ���� ������ ������ ������� - ������� ���������� 0.

����� ���������� ������� ��� ����������� ���������� ���� MYSQL_RES, ����� �� ����� ������������ ��� ����������in. ��� ���������� ��������� ��������� �������:

MYSQL_RES *res;
�����
mysql_use_result(MYSQL *query)
��� ������� ������������ ��� ������ �����������.

����� �� ����� ������������ ������� ����� ������� ��������, �� ��� ����� ��� ����� ������ �������. ������ �� ���:

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);
��� ������� ����������� ��������� � ������. ��� �� ��������, ������� ���������� ��������� � ������� ���������� ���� MYSQL_ROW. ��� ���������� ��������� ��������� �������:
MYSQL_ROW row;
��� �� ��� ������� ���������� row ��� ������ �����. ��� ������, ��� row[0] ������ ������� ������ ������, row[1] - ������ ������� ������ ������... ������� mysql_fetch_row ���������� ��������� ������ ����������, ���� ������ ������ ��� - ������������ ������������� ��������. ����� ��������� ������ �� ������ ������� ����������:
mysql_close(MYSQL *mysql)
 

��������� �������� �������

��� �������� ������ ���������� ����� � �������? ��������� ������� ������� �� ������ ������:
unsigned int STDCALL mysql_num_fields(MYSQL *mysql);

����� ������ ���������� ����� ���������� ������� �����������:

my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);

my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql);

��� ������� ���������� ���������� ����� ��� ������������� SQL �������� INSERT, DELETE, UPDATE. �������� ��������, ��� ������������ ��������� ����� ��� my_ulonglong.

� ������� ������ ����:

#include <mysql/mysql.h>
#include <stdio.h>

void main(){
   MYSQL *mysql;
   MYSQL_RES *res;
   MYSQL_ROW row;
   char *query;
   int t,r;

   mysql_init(mysql);
   if (!mysql_real_connect(mysql,"localhost","mysql",
        "mysql","deneme",0,NULL,0))
   {
       printf( "Error connecting to database: %s\n",mysql_error(mysql));
   }
   else printf("Connected...\n");

   query="select * from Deneme";

   t=mysql_real_query(mysql,query,(unsigned int) strlen(query));
   if (t)
   {
      printf("Error making query: %s\n",
              mysql_error(mysql));
   }
   else printf("Query made...\n");
   res=mysql_use_result(mysql);
   for(r=0;r<=mysql_field_count(mysql);r++){
           row=mysql_fetch_row(res);
           if(row<0) break;
           for(t=0;t<mysql_num_fields(res);t++){
                   printf("%s ",row[t]);
           }
           printf("\n");
   }
   mysql_close(mysql);
}
 

������������

 

�������� �������

� ������ ������� ���� �������� �������. �� ���� �������� �� ������ �������� ���� ����������� ��� ����������� ����������� ������ ���������.
 talkback page 

<--, ������� � ��������� �������� �������

Webpages maintained by the LinuxFocus Editor team
© Özcan Güngör, FDL
LinuxFocus.org
Translation information:
tr --> -- : Özcan Güngör <ozcangungor(at)netscape.net>
tr --> en: Özcan Güngör <ozcangungor(at)netscape.net>
en --> ru: Pukhlyakov Kirill <kirill(at)linuxfocus.org>

2003-09-02, generated by lfparser version 2.42