これは、C API を使用して MySQL に接続する、私が少し前に書いたプログラムからの (多かれ少なかれ) コピー アンド ペーストです。
#include <stdio.h>
#include <stdlib.h>
#include <my_global.h>
#include <mysql.h>
typedef struct
{
char host[20];
char user[25];
char pass[50];
}DB_CONN_PARAMS;
MYSQL * connect_db(DB_CONN_PARAMS *params)
{
MYSQL *connection = mysql_init(NULL);//init connection
if (connection == NULL)
{//check init worked
fprintf(stderr, "%s\n", mysql_error(connection));
exit(EXIT_FAILURE):
}
//connect:
if (mysql_real_connect(
connection,
params->host,
params->user,
params->pass,
NULL,0,NULL,0)
==NULL)
{//connection failed?
fprintf(stderr, "%s\n", mysql_error(connection));
mysql_close(connection);
exit(EXIT_FAILURE):
}
return connection;
}
int main()
{
MYSQL *db;
DB_CONN_PARAMS *params = calloc(1,sizeof(DB_CONN_PARAMS));
//just an alternative way of passing connection params, find a struct easier
params->host = "127.0.0.1";
params->user = "root";
params->pass = "mySuperSecretPass";
MYSQL * connect_db(DB_CONN_PARAMS *params);
db = connect_db(params);
//we don't need the struct anymore
free(params);
params = NULL;
//do stuff
mysql_close(db);//close connection, of course!
return EXIT_SUCCESS;
}
MySQL Web サイト のコード サンプルからインスピレーションのほとんどを得ました。正直なところ、彼らはうまくいきます。
コンパイルするときは、いくつかのことに留意する必要があります。上記のコードは、次のように gcc を使用して問題なくコンパイルできます。
gcc yourCode.c -std=c99 `mysql_config --cflags --libs` -o yourBin
クエリの実行に関しては、必要に応じて、mysql.com の The C-API documentationをブックマークすることをお勧めします。
プリペアド ステートメントを使用しないと、コードは次のようになります。
int main()
{
MYSQL *db;
char query_str[150];//query string here
int num1, num2, q_status;//your ints, + 1 to check success of query
DB_CONN_PARAMS *params = calloc(1,sizeof(DB_CONN_PARAMS));
params->host = "127.0.0.1";
params->user = "root";
params->pass = "mySuperSecretPass";
MYSQL * connect_db(DB_CONN_PARAMS *params);
db = connect_db(params);
free(params);
//get numbers
scanf("%d %d", num1, num2);
//insert num1, num2 and sum into query string
sprintf(query_str,
"INSERT INTO your_db.table (num1, num2, sum) VALUES (%d,%d,%d);",
num1,num2,(num1 + num2)
);
//run our query
q_status = mysql_query(db, query_str);
if (q_status)
{//insert failed
fprintf(stderr, "Failed to execute \"%s\"\n%s\n", query_str, mysql_error(db));
mysql_close(db);
exit(EXIT_FAILURE);
}
//YaY, it worked!
printf("Insert successful:\nQuery used: \"%s\"\n", query_str);
mysql_close(db);
return EXIT_SUCCESS;
}
しかし、それは結果セット、準備されたステートメント、および実際のプログラムで役立つ他のすべてのものを除外しています。私の回答でリンクしたドキュメントを参照してください。理解するのは難しくありません。時々、ちょっとおかしなことですが、MySQL C API...