Newsgroup: it.comp.os.linux.development
Titolo: Connessione a MySQL

Salve,
avrei bisogno di collegarmi a un server MySQL usando C++...
ho provato ad usare le API di cui si parla nel sito di MySQL, ma non
riesco a compilare.
Qualcuno di voi ha gia' qualche esperienza in merito?

Qualcuno di voi ha gia' qualche esperienza in merito?
Io no.
Alessandro.

vai su 
free.it.comp.database.mysql


ti faccio un piccolo esempio in C mi torna un po' meglio su due piedi, 
con c++ di solito uso il wrapper wxmysql.
#include <stdio.h>         //definizioni per I/O standard
#include <mysql/mysql.h>   //definizioni delle funzioni mysqlclient
#define HOST "localhost"     //host, username, password e nome del database.
#define USER "mysql"
#define PASSWD "mysql"
#define DB_NAME "test"
int main(int argc, char* argv[])
{
   MYSQL *mysql = NULL; // puntatore alla struttura necessaria per la 
conessione
   MYSQL_RES *result;   // puntatore al resultset
   MYSQL_ROW row;       // riga generica (anche del resultset)
   int i;                           // mi serve per iterare
   mysql = mysql_init(NULL); // inizializzo la libreria
   if(mysql == NULL)
     return 1; // può non funzionare nel caso scrivi qualcosa a video
   if(!mysql_real_connect(mysql, HOST, USER, PASSWD, DB_NAME, 
MYSQL_PORT, NULL, 0))
     return 1; // connessione vera e propria anche questa puo fallire
   if(mysql_query(mysql, "select * from test") != 0)
     return 1; // anche questa può fallire (ad esempio se non c'è il 
database test)
   result = mysql_use_result(mysql); // resultset
   while((row = mysql_fetch_row(result))) // analizzo una riga  alla volta
   {
         for (i=0;i <mysql_num_fields(result);i++) // stampo tutti i campi
             printf("%s\t", row[i]);
         printf("\n");
   }
   if(mysql_errno(mysql)) // altro controllo errori
     return 1;
   mysql_free_result(result); // pulizia in corso
   mysql_close(mysql); // chiusura della connessione
   return 0;
}
Ora avendo i file *.h e librerie in locazioni standard compilo 
semplicemente con:
gcc -o provamysql provamysql.c -lmysqlclien
Ciao.

 gcc -o provamysql provamysql.c -lmysqlclien
nightiger@silent: nightiger$ gcc -o prova prova.c -lmysqlclien
prova.c: In function `main':
prova.c:13: error: `conessione' undeclared (first use in this function)
prova.c:13: error: (Each undeclared identifier is reported only once
prova.c:13: error: for each function it appears in.)
prova.c:13: error: parse error before "MYSQL_RES"
prova.c:29: error: `database' undeclared (first use in this function)
prova.c:29: error: parse error before "test"
prova.c:33: error: `result' undeclared (first use in this function)
nightiger@silent: nightiger$ 
questo e' quello che ottengo io dopo che ho copiato il tuo listato ed ho
tentanto di compilarlo con la libreria detta da te.
Gli header li ho su /usr/include/mysql.
Una cosa analoga, anche se con molti piu' errori, mi capita con le API in
C++, e desidererei utilizzare proprio quest'ultime.
grazie x l'aiuto

 nightiger@silent: nightiger$
manca nelle dichiarazioni ...
MYSQL_RES *result;
cmq a parte quest' ultima , bastava dopo aver fatto il taglia-incolla
controllare il codice...
ciao.
-- 
Tu!  Che UNIVERSO e' questo??

 writes:
[...]
  N> nightiger@silent: nightiger$ gcc -o prova prova.c -lmysqlclien
-lmysqlclient, e' importante la t, importantissima :-)
Ciao,
nico

 -lmysqlclient, e' importante la t, importantissima :-)
un errore di copia&incolla, ma la t ci sta pure \-:

 controllare il codice...
hai pienamente ragione non ti sto pero' a dire x quale motivo non ho
neanche avuto la furbizia di controllare.
Cmq grazie
E sapete come posso fare a far funzionare invece le api in c++?

> E sapete come posso fare a far funzionare invece le api in c++?
no , su questo nn ti so' aiutare.....
ciao.
-- 
Negli anni 5, 4, 3, 2 e 1 avanti Cristo si intuiva che stava per succedere
qualcosa.
                -- Fabio Di Iorio

 no , su questo nn ti so' aiutare.....
grazie lo stesso

 con c++ di solito uso il wrapper wxmysql.
Scusa se mi intrometto, ho provato a compilare il tuo programma, e
funziona (la compilazione), ma se provo ad eseguirlo, non succede niente.
Allora ho provato a modificarlo per vedere dove si fermava, ed ecco il
nuovo sorgente:
#include <stdio.h>         //definizioni per I/O standard
#include <mysql/mysql.h>   //definizioni delle funzioni mysqlclient
#define HOST "localhost"     //host, username, password e nome del database.
#define USER "mysql"
#define PASSWD "mysql"
#define DB_NAME "test"
int main(int argc, char* argv[])
{
printf("PORTA %d\n",MYSQL_PORT);
   MYSQL *mysql = NULL; 
// puntatore alla struttura necessaria per la conessione
   MYSQL_RES *result;   
// puntatore al resultset
   MYSQL_ROW row;       
// riga generica (anche del resultset)
   int i;                           // mi serve per iterare
   mysql = mysql_init(NULL); // inizializzo la libreria
printf("Ciao, questo programma prova a connettersi ad un database mysql\n");
   if(mysql == NULL)
   {
   printf("Connessione fallita mysql==NULL\n");
     return 1; 
// può non funzionare nel caso scrivi qualcosa a video
}
   if(!mysql_real_connect(mysql, HOST, USER, PASSWD, DB_NAME,MYSQL_PORT, NULL, 0))
{
   printf("Connessione fallita HOST %s USER %s PASSWD %s DBNAME %s PORTA:%d\n",
          HOST,USER,PASSWD, DB_NAME,MYSQL_PORT);
     return 1; 
// connessione vera e propria anche questa puo fallire
}
   if(mysql_query(mysql, "select * from test") != 0)
     return 1; 
// anche questa può fallire (ad esempio se non c'è il database test)
   result = mysql_use_result(mysql); // resultset
   while((row = mysql_fetch_row(result))) // analizzo una riga  alla volta
   {
   printf("ciao\n");
         for (i=0;i <mysql_num_fields(result);i++) // stampo tutti i campi
             printf("%s\t", row[i]);
         printf("\n");
   }
   if(mysql_errno(mysql)) // altro controllo errori
     return 1;
   mysql_free_result(result); // pulizia in corso
   mysql_close(mysql); // chiusura della connessione
   return 0;
}
Ecco cosa mi restituisce:
PORTA 3306
Ciao, questo programma prova a connettersi ad un database mysql
Connessione fallita HOST localhost USER mysql PASSWD mysql DBNAME test
PORTA:3306
Come devo modificare il programma per farlo funzionare? Io non ne ho
nessuna idea, ma mi piacerebbe imparare. Ho trovato la documentazione, 
ma non mi è stata di grande aiuto.
Grazie per la risposta, eventuale :-)
Franz

 Grazie per la risposta, eventuale :-)
io ho testato il programma sul mio server dopo aver aggiunto un utente
apposito e modificato la select e funziona benissimo...
l'unico problema e' che non riesco a far funzionare le api in c++