Etnablog.altervista.org :)

Visitatore: 1313326
Welcome ospite
Menu di accessibilità:
Dimensione carattere:

Home > Programmazione C > Connettersi ad un database mysql con C
Contenuto della pagina:
23 Luglio 2007

Connettersi ad un database mysql con C

Nel mio pc ho un server LAMP su cui tengo una copia del sito e faccio esperimenti prima di portare on line le modifiche.

Mi domandavo: e se volessi manipolare il mio database mysql con un programma C? E' una cosa difficile da fare?

Ebbene, non è difficile smile.gif . Sono incappato su questa ottima guida, di cui indico il link per esteso:

http://www.linuxdidattica.org /docs/prg_C/cgiprg24.html

Da lì ho tratto questo ottimo codice, che è stato semplicissimo modificare per le mie esigenze:


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

const char* host = "localhost"; // host di connessione
const char* database = "mydb";  // database di connessione
const char* db_user = "myuser"; // nome utente per la connessione
const char* db_pass = "mypass"; // password non cifrata

int main ()
{
        MYSQL mysql;
        MYSQL_ROW row;        // la riga
        MYSQL_RES* result;
        MYSQL_FIELD* field;     // il campo ritornato

        char* query = "SELECT * FROM nome_tabella;";

        int i = 0, j = 0, n_rows = 0;

        // restituisce NULL se non avviene con successo
        if (! mysql_init (&mysql)) {
                printf ("Errore nella allocazione di memoria.n");
                exit (EXIT_FAILURE);
        }

        if (! mysql_real_connect (&mysql, host, db_user, db_pass, "",
                        0, NULL, 0)) {
                printf ("Errore nella connessione.n");
                goto error;
        }

        // restituisce zero se avviene con successo
        if (mysql_select_db (&mysql, database)) {
                printf ("Errore nella selezione del database.n");
                goto error;
        }

        printf ("Connessione avvenuta.n");


        // restituisce zero se avviene con successo
        if (mysql_select_db (&mysql, database)) {
                printf ("Errore nella selezione del database.n");
                goto error;
        }

        // esegue la query
        if (mysql_query (&mysql, query)) {
                printf("Errore nella query.n");
                goto error;
        }

        result = mysql_store_result (&mysql);

        n_rows = mysql_num_rows (result);

        for (j = 0; j < n_rows; j++) {
                i = 0;
                mysql_field_seek (result, 0);           // sposta a inizio riga
                row = mysql_fetch_row (result);      // preleva i dati della riga
                while ((field = mysql_fetch_field (result))) {
                        printf ("%s: ", field->name);     // visualizza il campo
                        printf ("%sn", row[i++]);          // visualizza il dato del campo
                }

                printf ("n");
        }



       mysql_free_result (result);

error:
        mysql_close (&mysql);   // chiusura del database

        exit (EXIT_SUCCESS);
}


Dovete anzitutto avere un database mysql gia installato e funzionante, con almeno una tabella gia pronta.

Il programmino in questione semplicemente si connette al db e vi mostra il contenuto della tabella.

Modificate nel codice i giusti parametri per connettersi al database (user, password, nome database...), modificate la query indicando il giusto nome della tabella, quindi salvate il file di testo col nome "prova_mysql.c".

Quindi installatevi da Synaptic il pacchetto libmysql++-dev (vi ricordo che la distro che uso è Ubuntu), che vi installerà le librerie di sviluppo per mysql e compilate il tutto con:
 


gcc -lmysqlclient -o mysqlapp prova_mysql.c

 
Quindi eseguite facendo, da shell:
 

./mysqlapp

 
A me funziona perfettamente, mostrandomi su shell tutto il contenuto della tabella indicata nella query :)

Descrizioni usate nelle foto: 
Postato da: Etnablog in Programmazione C alle 14:52

Permalink | Commenti(0)
Inserisci commento

Commenti:

Nessun commento. Vuoi essere il primo?
Solo gli utenti registrati possono lasciare commenti
Caricamento pagina: 0.01 s
*1 user online
Caricamento pagina: 0.02 s