Seguimos con la práctica del post anterior. El siguiente paso es instalar el codeblocks para escribir más cómodamente en Linux, y también libmysqlclient-dev, una librería de desarrollo que es la que incluye <mysql.h>.

Instalación de CodeBlocks y libmysqlclient-dev

Aparte de ello, necesitaremos otros servicios para conectarnos de forma remota, ya que por defecto la conexión no se permitirá.

Los datos de conexión son: Base de datos: aluBD, Usuario: alumno, Contraseña: alupass. Normalmente se tiene el mismo nombre para el usuario y la base de datos, aunque ahora lo hacemos con dos distintos para ver las diferencias.

Configuración de conexión remota

Parámetros de la base de datos

Lo siguiente será conectarnos a la base de datos con mysql_real_connect().

Prueba de conexión

Bueno, ahora que ya hemos comprobado que funciona, quedará ejecutar la consulta en sí.

Resultado de la consulta

Estéticamente feo de cojones, pero funcional.

Salida del programa

Vista de resultados en terminal

Resultado final

Código completo

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

int main()
{
    char *servidor = "192.168.137.114";
    char *usuario  = "alumno";
    char *password = "alupass";
    char *bd       = "aluBD";

    MYSQL     *conexion  = mysql_init(NULL);
    MYSQL_RES *resultado;
    MYSQL_ROW  registro;
    unsigned int num_campos;
    int i;

    char *consulta = "SELECT * FROM CLIENTES";

    // Inicializamos la estructura
    if (conexion == NULL) {
        fprintf(stderr, "La inicialización de la estructura MYSQL* ha fallado. Posible falta de memoria \n");
        return 0;
    }

    // Conectamos con la base de datos
    if (mysql_real_connect(conexion, servidor, usuario, password, bd, 0, NULL, 0) == NULL) {
        fprintf(stderr, "La conexión con el servidor ha fallado con el siguiente error: %s \n", mysql_error(conexion));
        return 0;
    }

    // Consulta a realizar
    if (mysql_query(conexion, consulta) != 0) {
        fprintf(stderr, "La consulta ha fallado");
        return 0;
    }

    // Almacenar en memoria uno a uno
    if ((resultado = mysql_use_result(conexion)) == NULL) {
        fprintf(stderr, "La obtención del resultado ha fallado \n");
        return 0;
    }

    // Capturar el registro a usar
    num_campos = mysql_num_fields(resultado);
    while ((registro = mysql_fetch_row(resultado)) != NULL) {
        for (i = 0; i < num_campos; i++) {
            fprintf(stdout, " %s |", registro[i]);
        }
    }

    printf("La versión actual del cliente MySQL es %s", mysql_get_client_info());

    // Liberar memoria
    mysql_free_result(resultado);

    mysql_close(conexion);
    return 0;
}

¡Salud y coding!