Conectando a Mysql en C bajo GNU/Linux
By: Date: enero 24, 2009 Categories: Programación

He visto muy pocos desarrollos en que usen base de datos como MYSQL que no estén ligados a la WEB ya sea con PHP (Principalmente) o ASP.NET, para escritorio lo más cercano es C#, sin embargo casi nada en los lenguajes tradicionales como C.

En este artículo mostrare como hacer conexiones a la base de datos, como agregarle un registro y luego consultarlo, para los que ya han conectado en PHP notaran que básicamente es igual, de hecho prácticamente las mismas funciones.

Antes de ejecutar este programa cree una base de datos en mi servidor llamada cmysql, del mismo valor cree el usuario y la clave, luego cree una tabla llamada tabla con 2 campos uno llamado visitante de tipo text y otro contador de tipo int ( que por cierto no va a contar )

El código fuente en C
#include <stdio.h>
#include <mysql.h>

int main ()
{

        // Tipos de Mysql
        MYSQL *conexion;
        MYSQL_RES *R;
        MYSQL_ROW COL;

        // Variables String para
conexion, opcionales
        char *servidor = “localhost”;
        char *usuario = “cmysql”;
        char *clave = “cmysql”;
        char *db = “cmysql”;

        // Inicializa ? JAJAJA OK,
la funcion es mas clara que el comentario
        conexion = mysql_init(NULL);

        // Se conecta a la DB con
las variables previas o usar aqui mismo STRINGs
        mysql_real_connect(conexion,
servidor, usuario, clave, db, 0, NULL, 0);

        // se agrega un registro por
cada ejecutsion del programa
        mysql_query(conexion,
“insert into tabla (visitante,contador) values(‘Mysql C en
localhost’,100);”);

        // Consulta de la tabla, en
esta y la linea a anterio igual podria usarse una varaible STRING para
el Query
        mysql_query(conexion,
“select * from tabla;”);

        // Resultados y ciclo para
mostrar el resultado, COL es de izquierda a derecha en la tabla
        R =
mysql_use_result(conexion);

        while ((COL =
mysql_fetch_row(R)) != NULL)
      printf(“Visitante: %s Contador:
%s\n”,COL[0], COL[1]);

        // Cerrar conexion a la DB
        mysql_close(conexion);

        return 0;
}

La salida esperada

[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
[david@lastdragon cmysql]$ ./cmysql
Visitante: Last Dragon Contador: 1
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100
Visitante: Mysql C en localhost Contador: 100

Consultando desde el cliente Mysql

mysql> insert into tabla (visitante,contador) values(‘Last Dragon’,1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from tabla;
+———————-+———-+
| visitante | contador |
+———————-+———-+
| Last Dragon | 1 |
| Mysql C en localhost | 100 |
| Mysql C en localhost | 100 |
| Mysql C en localhost | 100 |
| Mysql C en localhost | 100 |
+———————-+———-+
5 rows in set (0.00 sec)

mysql>

La compilación es algo aparatosa afortunadamente mysql incluye el comando mysql_config que dependiendo el parámetro nos entrega las banderas para el compilador

Mysql_config –cflags y mysql_config –libs

Tips bashero

Cualquier comando con un símbolo de dólar encerrado entre paréntesis arroja su salida al standart output, por ejemplo echo $(ls) daría un echo del echo del ls, mysql_config tira muchos parámetros asi que, podemos resumirlos con esto $(mysql_config –cflags) $(mysql_config –libs) al pasarlos directamente como parámetros de compilador

gcc cmysql.c $(mysql_config –cflags) $(mysql_config –libs) -o cmysql

8 thoughts on “Conectando a Mysql en C bajo GNU/Linux

  1. Opera 9.63 Windows Vista

    Esta bonito el code, solo dos cosas (y viendome muy picky):

    // Variables String para conexion, opcionales

    No son strings, son punteros a char

    // se agrega un registro por cada ejecutsion del programa

    Aquí es cuando se nota cuando Bucio ah entrado en nuestras vidas 😛 : Ejecución, supongo el fallo fue por traducir “execution”

    Por lo demás, buen post

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *