MySQL et le langage C
1) API en langage C
Pour avoir des informations sur les API en C je vous conseille d'aller voir sur le site de MySql.
Au niveau des structures de données, j'ai utilisé :
- MYSQL : pointeur sur une base
- MYSQL_RES résultat d’une requete
- MYSQL_ROW ligne de données.
- MYSQL_FIELD infos sur un champ
Pour se connecter ou se déconnecter d'une base, on utilise les fonctions :
- mysql_real_connect(...)
- mysql_close (...)
Les fonctions suivantes permettent de créer une requète et de l'exécuter :
- mysql_query ()
- mysql_store_result ()
- mysql_free_result()
Et enfin grace aux fonctions suivantes, on récupère les résultats dans un MYSQL_RES :
- mysql_fetch_row () : permet de parcourir chacune des lignes du resultset.
- mysql_field_seek () : permet de se positionner sur le premier champs d'une ligne d'un resultset.
- mysql_fetch_field () : permet de récuperer la donnée désirée.
2) Exemple Simple
//myClient.c #include<stdio.h> #include <stdlib.h> #include <mysql.h> MYSQL *conn; void process_result_set (MYSQL *conn, MYSQL_RES *res_set){ MYSQL_FIELD *field; MYSQL_ROW row; unsigned int i, col_len; while ((row = mysql_fetch_row (res_set)) != NULL){ mysql_field_seek (res_set, 0); for (i = 0; i < mysql_num_fields (res_set); i++){ field = mysql_fetch_field (res_set); printf (" %s |",row[i]); } printf("\n"); } printf ("%lu rows returned\n", (unsigned long) mysql_num_rows (res_set)); } int process_query (MYSQL *conn, char *query){ MYSQL_RES *res_set; unsigned int field_count; if (mysql_query (conn, query) != 0){ printf("process_query() failed"); return -1; } res_set = mysql_store_result (conn); if (res_set != NULL){ process_result_set (conn, res_set); mysql_free_result (res_set); return 0; } return -1; } int main (int argc, char *argv[]){ char *host_name = "localhost"; char *user_name = "fred"; char *password = "fred"; unsigned int port_num = 0; char *socket_name = NULL; char *db_name = "etudiant"; int flags = 0; int i; for(i=0;i<100;i++){ conn = mysql_init (NULL); if (mysql_real_connect (conn,host_name,user_name,password,db_name,port_num,socket_name,flags) == NULL){ printf("mysql_real_connect() failed"); return -1; } process_query (conn,argv[1]); mysql_close (conn); } return 0; }
3) Compilation
Le Makefile suivant vous permettra de compiler un programme en C utilisant les API de MySQL pour le language C.
#MakefileCC = gccINCLUDES = -I/usr/include/mysql -I.LIBS = -L/usr/local/lib/mysql -lmysqlclient -lmPROG = myClient
OBJS = $(PROG).o
all:: $(PROG).c.o: $(CC) -c $(INCLUDES) $< $(PROG).o:$(PROG): $(OBJS) $(CC) -o $@ $(OBJS) $(LIBS)
clean:: rm -f $(PROG) $(OBJS)