Comento todo el codigo para una mejor comprension del lector. El compilador utilizado es Dev-c++.
Con la inclusion de la lib windows.h ya pierde portablidad, pero la incluyo porque MySQL.h hace llamadas a sockets o sea winSock.h para poder establecer conexiones externas (ambiente Inet Global) y locales, la ventaja es que MySQL.h tambien esta para sistemas codigo abierto como Linux y Unix, pero en vez de windows.h habria que incluir otras librerias.
Nota: Algunas funciones no las comento, porque casi hacen las mismas llamadas y creo que entenderian el por que, pero si tienen alguna duda no olviden postear y claro cirtiquen el codigo falta optimizacion, aa se me olvido hacer la estrcutura de mi codigo con retornos para mayor optimizacion pero bueno algo es algo xD.
Salvedad: Doy por savido que los que lean este post es porque tienen conocimientos basicos de C y conocen bien los punteros a punteros y han trabajado con MySQL.
Antes de leer el codigo vean esto: (MYSQL_RES *) es un identificador o variable que puede contener filas de un determinado campo en nuestra BD para poder luego consultar este. (MYSQL_ROW) es tipo puntero a puntero aunque no se haga uso de * pero si vemos como consultamos sus datos nos daremos cuenta, este acepta valores o elementos que se encuentran en "MYSQL_RES *" o sea lo que recojimos con "MYSQL_RES *" esta variable los puede manejar sin problemas. (MYSQL *) este acepta elementos o valores de un retorno a una variable del mismo tipo para luego enviar y recibir datos, o sea es quien nos envia, devuelve, conecta y desconecta del servidor MySQL.
Código
#include <stdio.h> #include <windows.h> #include <mysql/mysql.h> //prototipos de funciones void mostrar(MYSQL *con, MYSQL_ROW row, MYSQL_RES *resultado, char *consulta); void insertar(MYSQL *con, char *nombre, int id); void borrar(MYSQL *con, MYSQL_RES *res, MYSQL_ROW row, int id); void update(MYSQL *con); void buscar(MYSQL *con, MYSQL_RES *res, MYSQL_ROW row, int id); //cuerpo de funciones void mostrar(MYSQL *con, MYSQL_ROW row, MYSQL_RES *resultado, char *consulta) { //concatena las constantes a la variable consulta //hacemos consulta y verificamos que se cumple if((mysql_query(con, consulta)==0)) { //guardamos resultado en la variable resultado que es de tipo MYSQL_RES * resultado=mysql_use_result(con); //leemos los datos almacenados en resultadoy lo devolvemos a la variable row que es de tipo MYSQL_ROW while(row=mysql_fetch_row(resultado)) { } } //preguntamos si se ha llegado al final de nuestra variable resultado if(!mysql_eof(resultado)) { } //cerramos conexion ya establecida //mysql_close(con); } void insertar(MYSQL *con, char *nombre, int id) { char consulta[50]; if((mysql_query(con, consulta)==0)) { } else { } } void borrar(MYSQL *con, MYSQL_RES *resultado, MYSQL_ROW row, int id) { char consulta[50]; if(mysql_query(con, consulta)==0) { } } void update(MYSQL *con) { char nombre[10], consulta[50]; int op, id; if(op==1) { } else { } if(mysql_query(con, consulta)==0) { } } void buscar(MYSQL *con, MYSQL_RES *res, MYSQL_ROW row, int id) { char consulta[50]; if(mysql_query(con, consulta)==0) { res=mysql_use_result(con); while(row=mysql_fetch_row(res)) { } } } int main() { MYSQL *con; MYSQL_RES *resultado; MYSQL_ROW row; char consulta[1024], nombre[25]; int id; int op; //inicializamos conexion SQL a algun atributo en este caso NULL. con = mysql_init(NULL); //establecemos conexion SQL y comprobamos que funciona if(!mysql_real_connect(con, "localhost", "root", NULL, "prueba", 3306, NULL, 0)) { } printf("Que quieres hacer\n\n1:Leer BD\n2:Insertar Datos\n3:Eliminar Datos\n4:Actualizar Datos\n5:Buscar Datos\n\nEliga Opcion: "); switch(op) { case 1: mostrar(con, row, resultado, consulta); return main(); //break; case 2: insertar(con, nombre, id); return main(); //break; case 3: borrar(con, resultado, row, id); return main(); //break; case 4: update(con); return main(); //break; case 5: buscar(con, resultado, row, id); return main(); default: break; } //cerramos conexion SQL mysql_close(con); }