viernes, 26 de febrero de 2010

Conectarse a un servidor Mysql usando la API de C bajo Linux o Unix

En estos días me he estado poniendo a tomar más en serio la idea de empezar a programar modulos en Asterisk, ya había probado un par de ejemplos que había visto en la pagina de Rusell Bryant las cuales postearé mañana, me ha entrado de nuevo la fiebre por C para ver si empezamos a superarnos jaja aquí dejo un codigo que halle en cibercity de como conectarse a Mysql usando la API de C

Es importante recordar que debemos tener instalados buil-tools, gcc y la librería  mysqlclient la cual contiene el código API de C que distribuye Mysql, antes que nada un recordatorio de todos los requerimientos necesarios:

  • mysql: MySQL client programs and shared library

  • mysqlclient: Backlevel MySQL shared libraries (old libs)

  • mysql-devel: Files for development of MySQL applications (a must have)

  • mysql-server: Mysql server itself

  • gcc, make and other development libs: GNU C compile


Programa sencillo para conectarse a Mysql: el link para descargar el código es este: fuente

Este programa debería funcionar en las mayoría de sistemas Linux y Unix. Ahora sí a lo que vinimos la carnita:
/* Simple C program that connects to MySQL Database server*/
#include <mysql.h>
#include <stdio.h>

main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;

char *server = "localhost";
char *user = "root";
char *password = "PASSWORD"; /* set me first */
char *database = "mysql";

conn = mysql_init(NULL);

/* Connect to database */
if (!mysql_real_connect(conn, server,
user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}

/* send SQL query */
if (mysql_query(conn, "show tables")) {
fprintf(stderr, "%s\n", mysql_error(conn));
exit(1);
}

res = mysql_use_result(conn);

/* output table name */
printf("MySQL Tables in mysql database:\n");
while ((row = mysql_fetch_row(res)) != NULL)
printf("%s \n", row[0]);

/* close connection */
mysql_free_result(res);
mysql_close(conn);
}

¿Cómo compilar y vincular el programa con las bibliotecas de MySQL?

MySQL viene con un script especial llamado mysql_config. El cual  proporciona información útil para la compilación del cliente de MySQL y de la conexión al servidor de base de datos MySQL. Necesitamos usar las siguientes dos opciones:

1 Pasar la opción --libs - librerías y opciones requeridad para crear un link con la librería de Mysql Client

En mi caso este es el resultado:

demo:~# mysql_config --libs
-L/usr/lib/mysql -lmysqlclient

2 Pasar la opción --cflags - Compiler flags to find include files and critical compiler flags and defines used when compiling the libmysqlclient library

En mi caso este es el resultado:

demo:~# mysql_config --cflags

-I/usr/include/mysql  -DBIG_JOINS=1 -fPIC
Necesitamos antes pasarle la opción al GNU C compiler osea gcc. Asi que compilamos el programa de la siguiente manera

gcc -o output-file $(mysql_config --cflags) mysql-c-api.c $(mysql_config --libs)

En mi caso:

demo:~# gcc -o output-file $(mysql_config --cflags) mysql-c-api.c $(mysql_config --libs)

mysql-c-api.c: In function âmainâ:

mysql-c-api.c:25: warning: incompatible implicit declaration of built-in function âexitâ

mysql-c-api.c:31: warning: incompatible implicit declaration of built-in function âexitâ
Ahora ejecutamos el programa:


demo:~# ./output-file

MySQL Tables in mysql database:

columns_priv

db

func

help_category

help_keyword

help_relation

help_topic

host

proc

procs_priv

tables_priv

time_zone

time_zone_leap_second

time_zone_name

time_zone_transition

time_zone_transition_type

user


Bueno eso sería todo por hoy, ya es tarde y hay que ir a descansar jiji, espero que les sea de ayuda a muchos, además adjunto un link del libro Practical C Programming de Oreylli es la 3ra Edición: link




No hay comentarios.:

Publicar un comentario