sábado, 19 de febrero de 2011

C - Acceder a una base de datos en mysql desde C (2 de 2. Conectandose a mysql)

Como conectarnos a una instancia de mysql-server desde un programa en C.

Un ejemplo sencillo conectándonos a una base de datos.

#include 
//agregamos la cabecera de mysql
#include 

//definimos una macro
#ifdef __linux__
    #define clrscr system("clear");
#else
    #define clrscr system("cls");
#endif

int main(int argc, char *argv[])
    {
    clrscr;
    //declaramos los objetos 
    //conexión, que será nuestro enlace 
    //abierto con la base de datos
    MYSQL *conn;
    //conjunto de resultados (o recordset), 
    //donde volcaremos los resultados de las 
    //consultas que realicemos
    MYSQL_RES *res;
    //fila, para poder trabajar de forma 
    //individual con los registros obtenidos de una consulta.
    MYSQL_ROW row;

    //definimos las variables que utilizaremos 
    //en las llamdas a los métodos
    char *server="localhost";
    char *user="miusuario";
    char *password="micontraseña";
    char *database=argv[1]; //aqui utilizamos el primer 
    //parámetro obtenido desde la linea de comando,

    //nos aseguramos de que conn no esta enlazando a nada    
    conn = mysql_init(NULL);

    //realizamos la conexión y comprobamos 
    //que no se hayan producido errores
    if (!mysql_real_connect(conn,server,user,password,database,0,NULL,0))
        {
        fprintf(stderr,"%s\n",mysql_error(conn));
        return 1;
        }

    //asignamos una consulta a la conexión 
    //y comprobamos que no se hayan producido errores
    if (mysql_query(conn, argv[2]))
        {
        fprintf(stderr,"%s\n",mysql_error(conn));
        return 1;
        }

    //volcamos el resultado de la consulta en el recordset
    res = mysql_use_result(conn);

    printf("Resultado de la consulta: \n");


    /*Recorremos el recordset:
        con mysql_fetch_row, avanzamos uno a uno
    los registros del recordset y volcamos la salida 
    en el row, Cuando no quedan más registros devuelve NULL.
    El row es un array que contiene los campos de la consulta.
    */
    while ((row = mysql_fetch_row(res)) != NULL)
        {
        printf("%s - %s \n", row[0],row[1]);
        }

    //liberamos el recordset.
    mysql_free_result(res);
    //cerramos la conexión al servidor mysql
    mysql_close(conn);
    return 0;
    }


Requisitos antes de compilar.

Información obtenida aquí:
http://www.cyberciti.biz/tips/linux-unix-connect-mysql-c-api-program.html

No hay comentarios:

Publicar un comentario