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
:
無事結果が表示された。
参考ページ
- Cでmysql接続 – まるこむ まるこめ まるこむい
コメント
CentOSサーバー上で動かせる、管理ツールを作ろうとして
参考にさせていただきました。
大変わかりやすかったです。
ありがとうございました!
ブログにリンクさせてもらってもいいでしょうか?