0

私は mysql を学んでいます。ここでは、c で非常に単純なプログラムを作成しました。それをmysqlデータベースに接続する必要があります。つまり、出力は mysql データベースに保存する必要があります。どうすればいいですか。mysqlのチュートリアルを参照しましたが、答えが得られませんでした。簡単なプログラムで実装を開始します。誰か私を導いてください。ありがとうございました

#include<stdio.h>
int main( ) 
{ 
int num1, num2, sum; 
printf("Enter a two integers: "); 
scanf("%d %d",&num1,&num2); num1=num1+num2; 
printf("Sum: %d",num1); 
return 0;
} 
4

2 に答える 2

1
#include <mysql.h>
#include <stdio.h>
main() {
   MYSQL *conn;
   MYSQL_RES *res;
   MYSQL_ROW row;
   char *server = "localhost";
   char *user = "root";
   char *password = "PASSWORD"; /* set me first */
   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);
}

詳細な説明については、http://www.cyberciti.biz/tips/linux-unix-connect-mysql-c-api-program.htmlを参照してください。

http://dev.mysql.com/downloads/connector/c/

于 2013-11-04T11:52:39.980 に答える
1

これは、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...

于 2013-11-04T12:14:04.420 に答える