{"id":322,"date":"2009-01-24T12:46:59","date_gmt":"2009-01-24T18:46:59","guid":{"rendered":"http:\/\/www.lastdragon.net\/?p=322"},"modified":"2009-01-24T12:49:32","modified_gmt":"2009-01-24T18:49:32","slug":"conectando-a-mysql-en-c-bajo-gnulinux","status":"publish","type":"post","link":"https:\/\/www.lastdragon.net\/?p=322","title":{"rendered":"Conectando a Mysql en C bajo GNU\/Linux"},"content":{"rendered":"<p>He visto muy pocos desarrollos en que usen base de datos como MYSQL que no est\u00e9n ligados a la WEB ya sea con PHP (Principalmente) o ASP.NET, para escritorio lo m\u00e1s cercano es C#, sin embargo casi nada en los lenguajes tradicionales como C.<\/p>\n<p>En este art\u00edculo 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\u00e1sicamente es igual, de hecho pr\u00e1cticamente las mismas funciones.<\/p>\n<p>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 )<\/p>\n<p>El c\u00f3digo fuente en C<br \/>\n#include &lt;stdio.h&gt;<br \/>\n#include &lt;mysql.h&gt;<\/p>\n<p>int main ()<br \/>\n{<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Tipos de Mysql<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MYSQL *conexion;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MYSQL_RES *R;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MYSQL_ROW COL;<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Variables String para<br \/>\nconexion, opcionales<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *servidor = &#8220;localhost&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *usuario = &#8220;cmysql&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *clave = &#8220;cmysql&#8221;;<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char *db = &#8220;cmysql&#8221;;<\/p>\n<p>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Inicializa ? JAJAJA OK,<br \/>\nla funcion es mas clara que el comentario<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conexion = mysql_init(NULL);<\/p>\n<p>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Se conecta a la DB con<br \/>\nlas variables previas o usar aqui mismo STRINGs<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mysql_real_connect(conexion,<br \/>\nservidor, usuario, clave, db, 0, NULL, 0);<\/p>\n<p>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ se agrega un registro por<br \/>\ncada ejecutsion del programa<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mysql_query(conexion,<br \/>\n&#8220;insert into tabla (visitante,contador) values(&#8216;Mysql C en<br \/>\nlocalhost&#8217;,100);&#8221;);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Consulta de la tabla, en<br \/>\nesta y la linea a anterio igual podria usarse una varaible STRING para<br \/>\nel Query<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mysql_query(conexion,<br \/>\n&#8220;select * from tabla;&#8221;);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Resultados y ciclo para<br \/>\nmostrar el resultado, COL es de izquierda a derecha en la tabla<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; R =<br \/>\nmysql_use_result(conexion);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((COL =<br \/>\nmysql_fetch_row(R)) != NULL)<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&#8220;Visitante: %s Contador:<br \/>\n%s\\n&#8221;,COL[0], COL[1]);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ Cerrar conexion a la DB<br \/>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mysql_close(conexion);<\/p>\n<p>\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br \/>\n}<\/p>\n<p>La salida esperada<\/p>\n<p>[david@lastdragon cmysql]$ .\/cmysql<br \/>\nVisitante: Last Dragon Contador: 1<br \/>\nVisitante: Mysql C en localhost Contador: 100<br \/>\n[david@lastdragon cmysql]$ .\/cmysql<br \/>\nVisitante: Last Dragon Contador: 1<br \/>\nVisitante: Mysql C en localhost Contador: 100<br \/>\nVisitante: Mysql C en localhost Contador: 100<br \/>\n[david@lastdragon cmysql]$ .\/cmysql<br \/>\nVisitante: Last Dragon Contador: 1<br \/>\nVisitante: Mysql C en localhost Contador: 100<br \/>\nVisitante: Mysql C en localhost Contador: 100<br \/>\nVisitante: Mysql C en localhost Contador: 100<br \/>\n[david@lastdragon cmysql]$ .\/cmysql<br \/>\nVisitante: Last Dragon Contador: 1<br \/>\nVisitante: Mysql C en localhost Contador: 100<br \/>\nVisitante: Mysql C en localhost Contador: 100<br \/>\nVisitante: Mysql C en localhost Contador: 100<br \/>\nVisitante: Mysql C en localhost Contador: 100<\/p>\n<p>Consultando desde el cliente Mysql<\/p>\n<p>mysql> insert into tabla (visitante,contador) values(&#8216;Last Dragon&#8217;,1);<br \/>\nQuery OK, 1 row affected (0.00 sec)<\/p>\n<p>mysql> select * from tabla;<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+<br \/>\n| visitante            | contador |<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+<br \/>\n| Last Dragon          |        1 |<br \/>\n| Mysql C en localhost |      100 |<br \/>\n| Mysql C en localhost |      100 |<br \/>\n| Mysql C en localhost |      100 |<br \/>\n| Mysql C en localhost |      100 |<br \/>\n+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;-+<br \/>\n5 rows in set (0.00 sec)<\/p>\n<p>mysql><\/p>\n<p>La compilaci\u00f3n es algo aparatosa afortunadamente mysql incluye el comando mysql_config que dependiendo el par\u00e1metro nos entrega las banderas para el compilador<\/p>\n<p>Mysql_config \u2013cflags y mysql_config \u2013libs<\/p>\n<p>Tips bashero<\/p>\n<p>Cualquier comando con un s\u00edmbolo de d\u00f3lar encerrado entre par\u00e9ntesis arroja su salida al standart output, por ejemplo echo $(ls) dar\u00eda un echo del echo del ls, mysql_config tira muchos par\u00e1metros asi que, podemos resumirlos con esto $(mysql_config &#8211;cflags) $(mysql_config &#8211;libs) al pasarlos directamente como par\u00e1metros de compilador<\/p>\n<p>gcc cmysql.c $(mysql_config &#8211;cflags) $(mysql_config &#8211;libs) -o cmysql<\/p>\n","protected":false},"excerpt":{"rendered":"<p>He visto muy pocos desarrollos en que usen base de datos como MYSQL que no est\u00e9n ligados a la WEB ya sea con PHP (Principalmente) o ASP.NET, para escritorio lo m\u00e1s cercano es C#, sin embargo casi nada en los lenguajes tradicionales como C. En este art\u00edculo mostrare como hacer conexiones a la base de&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-322","post","type-post","status-publish","format-standard","hentry","category-programacion"],"_links":{"self":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=322"}],"version-history":[{"count":0,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=\/wp\/v2\/posts\/322\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lastdragon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}