Acceder a MySQL usando C

Con este tutorial le presento a la comunidad cómo acceder a una base de datos MySQL desde el lenguaje de programación C y sin usar demasiadas dependencias, con solo

libmysqlclient

Espero que les sirva de utilidad a los que necesitaban este tipo de documentación y asi seguir contribuyendo con la comunidad de SL y ayudar a los que no cuentan con INTERNET.

Configuración

Primero debemos comprobar que tengamos instalada las librerías de diseño *-dev para poder acceder desde C/C++ a MySQL.

mysql_config --libs

Debería aparecer algo como esto:

-Wl, -Bsymbolic-funciones –L/usr/lib/mysql -lmysqlclient rdynamic

En caso de que marque que no esta instalada la librería la instalamos con el siguiente comando:

sudo apt-get install libmysqlclient-dev
mysql_config --cflags -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -DUNIV_LINUX -DUNIV_LINUX

Ya que verificamos e instalamos lo que necesitamos para el enlace entre MySQL y C, procedemos a la creación de la base de datos:

CREATE DATABASE prueba;
USE prueba;
CREATE TABLE datos (id int AUTO_INCREMENT NOT NULL PRIMARY KEY, nombre varchar(40), edad int);
INSERT INTO datos VALUES (NULL, 'Alma Hernandez', 28), (NULL, 'Jose Sanchez', 39), (NULL, 'Martin loera', 25), (NULL, 'Leonardo Cortez', 26), (NULL, 'Gustavo Romero', 25);

Programación y compilación

Proseguimos a crear el código:

Consulta.c

/* librerías que usaremos */
#include <mysql.h> /* libreria que nos permite hacer el uso de las conexiones y consultas con MySQL */
#include <stdio.h> /* Para poder usar printf, etc. */

int main()
{
	MYSQL *conn; /* variable de conexión para MySQL */
	MYSQL_RES *res; /* variable que contendra el resultado de la consuta */
	MYSQL_ROW row; /* variable que contendra los campos por cada registro consultado */
	char *server = "localhost"; /*direccion del servidor 127.0.0.1, localhost o direccion ip */
	char *user = "root"; /*usuario para consultar la base de datos */
	char *password = "root"; /* contraseña para el usuario en cuestion */
	char *database = "prueba"; /*nombre de la base de datos a consultar */
	conn = mysql_init(NULL); /*inicializacion a nula la conexión */

	/* conectar a la base de datos */
	if (!mysql_real_connect(conn, server, user, password, database, 0, NULL, 0))
	{ /* definir los parámetros de la conexión antes establecidos */
		fprintf(stderr, "%s\n", mysql_error(conn)); /* si hay un error definir cual fue dicho error */
		exit(1);
	}

	/* enviar consulta SQL */
	if (mysql_query(conn, "select * from datos"))
	{ /* definicion de la consulta y el origen de la conexion */
		fprintf(stderr, "%s\n", mysql_error(conn));
		exit(1);
	}

	res = mysql_use_result(conn);
	printf("ID\tNombre\t\tedad\n");
	while ((row = mysql_fetch_row(res)) != NULL) /* recorrer la variable res con todos los registros obtenidos para su uso */
		printf("%s\t%s\t%s \n", row[0],row[1],row[2]); /* la variable row se convierte en un arreglo por el numero de campos que hay en la tabla */

	/* se libera la variable res y se cierra la conexión */
	mysql_free_result(res);
	mysql_close(conn);
}

Compilamos con:

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

Comprobación

Ejecutamos:

./Consulta

Fuente: Blog de Hugo4295


7 comentarios, deja el tuyo

Deja tu comentario

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

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   Koratsuki dijo

    Buena esa, guardado en mi arsenal de scripts y tutoriales en consola! +1 para ti socio…

  2.   rodrigo dijo

    Hola muchas felicidades de todo lo que haye en la web respecto a este tema lo tuyo fue lo mas cercano a la solucion. solo una pequeña duda, porque no me jenera el ejecutable??

    a la hora de comílar no me marca ningun error pero no me genera el ./ser4

  3.   Andrelo dijo

    Alguna idea de como hacerlo en Fedora?

  4.   victor de la o dijo

    no estoy en desacuerdo con compartir la informacion pero si en que no se coloquen los derechos de autor ya que este ejemplo fue hecho por mi desde el 2011 y aqui esta la direccion de la fuente original

    http://hugo4295.blogspot.mx/search?q=MYSQL

    1.    elav dijo

      No hay problema Victor, pero si te fijas no tomé el artículo de tu sitio, sino de otro donde lastimosamente no pusieron la fuente. No obstante, ahora mismo edito el artículo.. 😉

  5.   alfonso ovidio lópez morales dijo

    excelente compartir conocimiento una gran libertad

  6.   DANIELA FERNANDEZ dijo

    Y como se pueden hacer inserciones ???