Hola experto. Estoy trabajando sobre uniz y necesito conectar una aplicación de C con una base de datos Mysql. La cuestión es que no consigo hacerlo. Tengo puesto: #include "/datos/mysql/include/mysql.h" int main (void) { MYSQL mysql; mysql_connect (&mysql,"host","usuario","password"); } Muchas gracias de antemano.
Aunque no me comentas mucho acerca de la naturaleza del error (compilación, mensaje...) puedo interta guiarte un poco. En primer lugar te recomendaria que usaras C++. La razón de esto es que la diferencia con C al nivel que tu necesitas es mínima y, por contra, cualquier acceso a BD es mucho más simple con los objetos que ya te vandrán dados: Recordset, Connection... Además no conozco la librería mysql. H con lo que si quieres usar esa no te puedo ayudar mucho. Deberías buscar documentación donde encontraste esa librería. Fíjate en el código que viene a continuación. No te sonará a chino y está a en c++. #include <iostream> #include <iomanip> #include <sqlplus.hh> int main() { Connection con("mysql_cpp_data"); // The full format for the Connection constructor is // Connection(cchar *db, cchar *host="", // cchar *user="", cchar *passwd="") // You may need to specify some of them if the database is not on // the local machine or you database username is not the same as your // login name, etc.. Query query = con.query(); // This creates a query object that is bound to con. query << "select * from stock"; // You can write to the query object like you would any other ostrem Result res = query.store(); // Query::store() executes the query and returns the results cout << "Query: " << query. preview() << endl; // Query::preview() simply returns a string with the current query // string in it. cout << "Records Found: " << res.size() << endl << endl; Row row; cout.setf(ios::left); Cout << setw(17) << "Item" << Setw(4) << "Num" << Setw(7) << "Weight" << Setw(7) << "Price" << "Date" << endl << endl; Result::iterator i; // The Result class has a read-only Random Access Iterator for (i = res.begin(); i != res.end(); i++) { row = *i; cout << setw(17) << row[0] << setw(4) << row[1] << setw(7) << row["weight"] // you can use either the index number or column name when // retrieving the colume data as demonstrated above. << setw(7) << row[3] << row[4] << endl; } return 0; } Todo esto, junto con un completo manual, puedes encontrarlo en www.mysql.com. La API con las librerías también.
Para poder ayudarte necesito saber como compilas ese código, que librerías tienes de MySql, etc... Pues el fallo no está en el código desde luego. Dame más detalles y te echo un cable
Estoy compilando el fichero con la siguiente orden: gcc correo.c -o correo -L/datos/mysql/lib -lmysqlclient -lnsl Pero me da el error: Undefined first referenced symbol in file socket /datos/mysql/lib/libmysqlclient.a(libmysql.o) setsockopt /datos/mysql/lib/libmysqlclient.a(libmysql.o) getservbyname /datos/mysql/lib/libmysqlclient.a(libmysql.o) floor /datos/mysql/lib/libmysqlclient.a(password.o) getsockopt /datos/mysql/lib/libmysqlclient.a(libmysql.o) shutdown /datos/mysql/lib/libmysqlclient.a(libmysql.o) connect /datos/mysql/lib/libmysqlclient.a(libmysql.o) ld: fatal: Symbol referencing errors. No output written to correo collect2: ld returned 1 exit status No se que hacer. Me ahn comentado que lo intente con C++, pero no lo domino. Bueno, un saludo y muchas gracias.
Je je, quien te ha dicho eso debe ser un buen fontanero, coméntaselo si tienes ocasión. El problema es que necesitas incluir la librería sockets al compilar, nada más. Hazlo de esta forma: gcc correo.c -o correo -L/datos/mysql/lib -lmysqlclient -lnsl -lsocket Supongo que esto solucionará el error. Si sigues con problemas de este tipo, me lo puedes consultar en privado.