You are here: Home » Linux » Programlama » Linux/Unix Üzerinde C ile Mysql’e Bağlanma

Linux/Unix Üzerinde C ile Mysql’e Bağlanma

Linux/Unix üzerinde C programlama dilini kullanarak Mysql’e bağlanan bir program yazmak ve bu programı derlemek istiyorsanız öncelikle aşağıdaki paketlerin sistemde yüklü ve yapılandırılmış olması gereklidir.

  • mysql : MySQL binary ve kütüphaneleri
  • mysqlclient : MySQL client tarafı için gerekli binary ve kütüphaneler
  • mysql-devel: Development için kullanılan paket (mysql_config için şart)
  • mysql-server: MySQL sunucunun kendisi (Bu örnekte client-server aynı makina üzerinde olduğu için)
  • gcc, make and other development libs: GNU C Derleyici

Yukarıdaki paketleri Centos üzerinde yum ile, Ubuntu üzerinde Synaptic ile yükleyebilirsiniz.

Eğer Ubuntu üzerinde mysql_config binarysini bulamıyorsanız aşağıdaki komutlar ile son mysql-devel paketini bularak yüklemelesiniz.

hakan@hakan-laptop:~$ sudo aptitude search libmysqlclient
i   libmysqlclient16

Yukarıdaki çıktıyı aldıktan sonra libmyclientxx örneğindeki xx bilgisini alarak aşağıdaki komut çalıştırılmalı.

hakan@hakan-laptop:~$ sudo apt-get install libmysqlclient16-dev

Evet bu durumda mysql_config binarysi yüklenmiş olmalı.

 

Aşağıda verdiğim örnek kodu mysql.c olarak kaydedin.

/* 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"; /* yazdıgınız kullanıcı için şifre yazın */
   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);
}

Artık mysql.c dosyasını derleyebiliriz. Bunun için sisteminize özel olarak mysqlin hangi library ve include dosya
larını kullanacağını belirlemek için bize yardımcı olması açısından mysql_config programından yararlanacağız.

Aşağıdaki komut ile mysql apisinin derleme aşamasında sizin sisteminiz üzerinde hangi librarylere ihtiyacı olduğunu belirleyebilirsiniz.

hakan@hakan-laptop:~$ mysql_config --libs
-L/usr/lib64/mysql -lmysqlclient -lz -lcrypt -lnsl -lm -L/usr/lib64 -lssl -lcrypto

Aynı şekilde aşağıdaki komut ile mysql apisini derleyebilmek için gerekli include dosyalarını tespit edebilirsiniz

hakan@hakan-laptop:~$ mysql_config --cflags
-I/usr/include/mysql -g -pipe -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 \
-D_LARGEFILE_SOURCE -fno-strict-aliasing

Evet gereken kütüphane ve include dosyalarını bildiğimize göre derleme komutunu verebiliriz.

hakan@hakan:~$ gcc  -o mysql $(mysql_config --cflags) mysql.c  $(mysql_config --libs)
mysql.c: In function ‘mysql’:
mysql.c:23: warning: incompatible implicit declaration of built-in function ‘exit’
mysql.c:33: warning: incompatible implicit declaration of built-in function ‘exit’

Bu durumda eğer yukarıdaki uyarı mesajlarından başka mesaj almadıysanız mysql adında bir binary oluşmuş olmalı. Oluşan binary büyük ihtimalle +x hakkı ile oluşacaktır fakat her ihtimale karşı izinlerine +x verelim ve oluşan binaryimizi çalıştıralım.

hakan@hakan:~$ chmod +x mysql
hakan@hakan:~$ ./mysql
MySQL Tables in mysql database:
columns_priv
db
func
help_category
help_keyword
help_relation
help_topic
host
tables_priv
time_zone
time_zone_leap_second
time_zone_name
time_zone_transition
time_zone_transition_type
user 

  

Evet C ile yazdığımız programımız mysql ile haberleşerek bize çıktı üretti. Örnek kodun içerisindeki query üzerinde değişikilk yaparak istediğiniz bir amaç için program yazabilirsiniz.

Umarım faydalı bir paylaşım olmuştur, yeni bir yazıda görüşmek dileğiyle…

Filed under

Linux, Programlama

| Tags:

  1. Evgin Duyarlı

    Guzel paylasimlar, devamını bekliyoruz 🙂

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This site uses Akismet to reduce spam. Learn how your comment data is processed.