1

mysqlを使ってC言語でプログラムを書きました。うまくいきません。

mysql への接続に役立つ接続関数を作成します

MYSQL *ts_mysql_connect(char *host, char *user, char *pass, char *database)
{

MYSQL *conn = mysql_init(NULL);
fprintf(stderr, "[ts_mysql_connect] conn-> %ld\n", conn);
if (!mysql_real_connect(conn, host, user, pass, database, 0, NULL, 0)){
    fprintf(stderr, "%s\n", mysql_error(conn));
    exit(1);
}

//set auto commit to false
if (mysql_autocommit(conn, 0))
    fprintf(stderr, "%s\n", "SET MYSQL autocommit to off faild!");
fprintf(stderr, "[ts_mysql_connect] conn-> %ld\n", conn);
return conn;

 }

以下のコードを使用して、関数を呼び出します

    MYSQL *test;
    test = ts_mysql_connect(conf->run_conf->mysql_host,
                                  conf->run_conf->mysql_user,
                                  conf->run_conf->mysql_pass,
                                  conf->run_conf->mysql_database);
    conf->mysql_start = time(NULL);
    if (verbose)
        fprintf(stderr, "[ts_mysql_insert] mysql conn init at %ld\n",
                                             &test);
    exit(1);

ts_mysql_connectconnの異なるアドレスを返す理由がわかりません。

実行ログ:

[ts_mysql_connect] conn-> 140065527302336
[ts_mysql_connect] conn-> 140065527302336
[ts_mysql_insert] mysql conn init at -1946154816

MYSQL *conn[ts_mysql_insert] と [ts_mysql_connect] のアドレスが異なる理由

4

2 に答える 2

0
#include <stdio.h>
#include <stdlib.h>
#include <my_global.h>
#include <mysql.h>

MYSQL *DatabaseConnection;
const char *ServerName = "192.168.1.12";
const char *User = "dbuser";
const char *Password = "dbpassword";
const char *Name = "test";
const char *DB_Socket_Path = "/var/run/mysqld/mysql.sock";

int execute_db_query(const char *sql_query)

{
    MYSQL_RES *result = NULL;
    MYSQL_ROW row;
    int num_fields;
    int i;

    if (!DatabaseConnection)
        return -1;

    mysql_query(DatabaseConnection, sql_query);

    result = mysql_store_result(DatabaseConnection);

    if(result == NULL)
    {
        mysql_free_result(result);
                return -1;
    }

    if (!result->eof) {
        mysql_free_result(result);
        return -1;
    }

    num_fields = mysql_num_fields(result);

    int f_count = result->field_count;
    int index =1 ;
    while ((row = mysql_fetch_row(result))) {
        for (i = 0; i < num_fields; i++) {
            printf("%s ", row[i] ? row[i] : "NULL");

        }
        printf("\n");
        index++;

    }


    mysql_free_result(result);

    return 0;
}
void close_db_connection() {
    mysql_close(DatabaseConnection);
    mysql_library_end();
}
int init_connect() {

    DatabaseConnection = mysql_init(NULL);
    printf("MySQL client version: %s\n", mysql_get_client_info());

    if (!mysql_real_connect(DatabaseConnection, ServerName, User, Password,
            Name, 0, DB_Socket_Path, 0)) {
        puts(mysql_error(DatabaseConnection));
        close_db_connection();

        return -1;
    }

    printf("Host : %s \n", mysql_get_host_info(DatabaseConnection));
    printf("Server : %s: \n", mysql_get_server_info(DatabaseConnection));
    printf("Protocol : %d\n", mysql_get_proto_info(DatabaseConnection));

    return 0;
}

int main(void) {
    puts("SQL Example"); 
    init_connect() ;
    execute_db_query("select * from test");
    return EXIT_SUCCESS;
}

ソケットレス接続を使用しているため、この場合は NULL を渡すことができます。

于 2013-06-19T06:50:11.940 に答える