#include <mysql.h>
#include <stdio.h>

/*
1. ヘッダファイルの読み込み
2. 初期化
3. オプションの設定
4. 接続
5. SQL文実行、結果受け取り処理
6. 切断

gcc -I/usr/include/mysql ....
gcc -o ...... -L/usr/lib/mysql ....

リンク時にlibmysqlclientをリンクします。同時にlibmライブラリや
ネットワークのライブラリもリンクする。

/usr/local/mysql/include/mysql/mysql.h

コンパイル
gcc -c -I /usr/local/mysql/include/mysql/ mysql_client.c

リンク
gcc -o mysql_client.exe mysql_client.o \
-L /usr/local/mysql/lib/mysql/ -l mysqlclient


*/
int main(int argc, char **argv)
{
	MYSQL *mysql,	*con;
	MYSQL_RES	*res;
	MYSQL_ROW	row, end_row;
	int		r, n, i;
	/*
	connectする前に必ずmysql_init()
	引数がNULLの場合は新たに割り当てを行って、それを返す
	*/
	mysql = mysql_init(NULL);
	if(NULL==mysql){
		// 初期化できなかった場合のエラー処理
		// 初期化できなかったらNULLが返る
		exit(1);
	}

	// mysql_optionsは、初期化の後、接続の前に使用しなくてはならない
	mysql_options(mysql, MYSQL_OPT_COMPRESS, 0);

	/*
	サーバーに接続
	NULLの場合、デフォルトを使用する

	ホストがNULL	: localhostになる
	ユーザがNULL	: このプログラムを使用するアカウント名になる
	ソケットがNULL	: デフォルトのソケットファイル
	ポート番号が0	: デフォルトのポート番号
	*/
	con = mysql_real_connect(mysql, "localhost", "mysql", "",
		"test", 0, NULL, 0);
	if (NULL==con){
		// 接続に失敗したらNULLが返る
		printf("setuzokusipai\n");
		exit(1);
	}

	// 普通に、SQL文で問い合わせる
	r = mysql_query(mysql, "SHOW databases");
	if(0 == r){
		// クエリが成功した場合は0が返る！ エラー時は0以外！
		if(mysql_field_count(mysql)>0){
			// 結果セットを得る
			res = mysql_store_result(mysql);
			if(NULL == res){
				// エラーがある場合 NULL
				mysql_close(mysql);
				return 1;
			}
			n = mysql_num_fields(res);

			while((row = mysql_fetch_row(res))){
				for(i=0; i<n; i++){
					printf("%s\t", row[i]);
				}
				printf("\n");
			}
		}
	}
	// 接続を閉じる
	mysql_close(mysql);
	exit(0);
}
