C で MySQL に接続する

CentOS 5.7 上で C から MySQL に接続する方法のメモ。

スポンサーリンク

ライブラリのインストール

ヘッダファイルやライブラリが入っているか確かめる。

$ vi mysqltest.c

[cc lang=”c”]#include
#include

int main() {
return 0;
}

$ gcc -o mysqltest mysqltest.c
mysqltest.c:3:25: error: mysql/mysql.h: そのようなファイルやディレクトリはありません

入っていないようなので,yum でインストールする。

# yum -y install mysql-devel

インストールされたか確認する。

$ ls /usr/include/mysql
decimal.h	my_config.h	  my_pthread.h ...

ちゃんと入ったようだ。

接続

試しに MySQL サーバに接続してみる。

$ vi mysqltest.c

[cc lang=”c”]#include
#include
#include

#define DBHOST “localhost”
#define DBUSER “myuser”
#define DBPASS “mypass”
#define DBNAME “mydb”

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

// 接続
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, DBHOST, DBUSER, DBPASS, DBNAME, 3306, NULL, 0)) {
fprintf(stderr, “%s\n”, mysql_error(conn));
exit(1);
}

// 切断
mysql_close(conn);

return 0;
}
コンパイルする。

$ gcc -o mysqltest mysqltest.c
/tmp/ccBEJwnl.o: In function `main':
mysqltest.c:(.text+0x19): undefined reference to `mysql_init'
mysqltest.c:(.text+0x5f): undefined reference to `mysql_real_connect'
mysqltest.c:(.text+0x6e): undefined reference to `mysql_error'
mysqltest.c:(.text+0x9f): undefined reference to `mysql_close'
collect2: ld はステータス 1 で終了しました

怒られた。ライブラリを指定して再度コンパイルする。

$ gcc -lmysqlclient -o mysqltest mysqltest.c
/usr/bin/ld: cannot find -lmysqlclient
collect2: ld はステータス 1 で終了しました

まだだめだった。ライブラリのパスも指定してコンパイルする。

$ gcc -L/usr/lib/mysql -lmysqlclient -o mysqltest mysqltest.c

今度はうまくいった。

SQL の実行

いよいよ実際に SQL を実行する。
[cc lang=”c”]#include
#include
#include

#define DBHOST “localhost”
#define DBUSER “myuser”
#define DBPASS “mypass”
#define DBNAME “mydb”

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

// 接続
conn = mysql_init(NULL);
if (!mysql_real_connect(conn, DBHOST, DBUSER, DBPASS, DBNAME, 3306, NULL, 0)) {
fprintf(stderr, “%s\n”, mysql_error(conn));
exit(1);
}

// クエリ発行
if (mysql_query(conn, “show tables”)) {
fprintf(stderr, “%s\n”, mysql_error(conn));
exit(1);
}
res = mysql_use_result(conn);

// 結果表示
while ((row = mysql_fetch_row(res)) != NULL) {
printf(“%s\n”, row[0]);
}
mysql_free_result(res);

// 切断
mysql_close(conn);

return 0;
}

コンパイルして実行してみる。

$ gcc -L/usr/lib/mysql -lmysqlclient -o mysqltest mysqltest.c
$ ./mysqltest
mytable1
mytable2
  :

無事結果が表示された。

参考ページ

コメント

  1. じゅんぼ より:

    CentOSサーバー上で動かせる、管理ツールを作ろうとして
    参考にさせていただきました。

    大変わかりやすかったです。

    ありがとうございました!

    ブログにリンクさせてもらってもいいでしょうか?

タイトルとURLをコピーしました