Autore: Fabio Di Matteo
Ultima revisione: 20/12/2013
Risorse:
MySQL C API
Per far interagire i nostri programmi con il popalare database libero, è necessario avere installato nella propria macchina MySQL C API . Di solito la libreria viene distribuita assieme a mysql, ma non nel caso della distribuzione Debian e Ubuntu in cui la libreria risiede nel pacchetto libmysqlclientXX-dev .
L'utilizzo della libreria non è affatto complesso anche se esistono numerose funzioni (ben documentate sul sito), di seguito un sorgente commentato che ne spiega l'utilizzo.
#include <my_global.h> #include <mysql.h> // gli header di MySQL C API #include <stdio.h> int main(void) { MYSQL *conn; //il puntatore alla connessione a mysql MYSQL_RES *res; //il puntatore alla risorsa mysql MYSQL_ROW row; // il vettore in cui verranno messi i risultati delle query /* Dichiaro le variabili di connessione */ char *server = "hostnostro.it"; char *user = "utente"; char *password = "password-segreta"; char *database = "nostro-database"; /*Inizializzo la connessione*/ conn = mysql_init(NULL); /* Se possibile mi connetto al database altrimenti esco dal programma e scrivo un messaggio d'errore sullo stderr*/ if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } /* Invio se possibile la query */ if (mysql_query(conn, "show tables")) { fprintf(stderr, "%s\n", mysql_error(conn)); exit(1); } /*Prendo i risultati della query*/ res = mysql_use_result(conn); /* Stampo a video i risultati della query */ printf("MySQL Tables in mysql database:\n"); while ((row = mysql_fetch_row(res)) != NULL) //nel vettore row ci sono i risultati adesso printf("%s \n", row[0]); /* Distruggo il puntatore ai risultati della query e chiudo la connessione al database */ mysql_free_result(res); mysql_close(conn); return 0; }
Per compilare il nostro sorgente abbiamo bisogno di un makefile come questo:
CPP = gcc OPTS = `mysql_config --libs --cflags` all: $(CPP) main.c -o main $(OPTS) clean: rm main
Da notare che si fa uso del programma mysql_config
per trovare i giusti flag necessari alla compilazione, proprio come si fa con gtk+2 o gtkmm o altri toolkit.
CPP = gcc OPTS = `mysql_config --libs --cflags` OPTS-STATIC = `mysql_config --cflags` /usr/lib/libmysqlclient.a -lpthread -lz -lm -lssl -lcrypto -ldl all: $(CPP) main.c -o main $(OPTS) static: $(CPP) main.c -o main-static $(OPTS-STATIC) clean: rm main
Dunque per creare l'eseguibile statico digitare make static
.
Ho ottenuto i parametri -lpthread -lz -lm -lssl -lcrypto -ldl
dall'output del comando mysql_config –libs
. Invece ho cercato manualmente il percorso della libreria /usr/lib/libmysqlclient.a
.
Per compilare su windows ho usato i (devpaks) per Dev-C++ e poi copiato gli header e le librerie nella root di Code::Blocks. Ecco la procedura da seguire:
c:\dev-cpp\include\mysql
in c:\Programmi\CodeBlocks\mingw\include
;c:\dev-cpp\lib\
nella directory c:\Programmi\CodeBlocks\mingw\lib
;libmysql.a
dal menu Project→ Build Option → Linker Settings . Aggiungendo il percorso c:\Programmi\CodeBlocks\mingw\lib\libmysql.a
.Per avviare correttamente l'eseguibile occorre mettere nella stessa directory la libreria libmysql.dll .
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.