2010-08-10 117 views
2

我正在研究一個簡單的C程序,它必須連接到我的數據庫,然後執行查詢,然後關閉連接。C程序的mysql連接

int main() 
{ 
    MYSQL *conn; 
    conn = mysql_init(NULL); 

    if (conn == NULL) { 
     printf("Error %u %s\n", mysql_errno(conn), mysql_error(conn)); 
     exit(1); 
    } 

    if (mysql_real_connect(conn, "localhost", "root", "root", NULL, 8889, NULL, 0)) { 
     printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn)); 
     exit(1); 
    } 

    if (mysql_query(conn, "create database testdb")) { 
     printf("Error %u: %s",mysql_errno(conn), mysql_error(conn)); 
     exit(1); 
    } 

    mysql_close(conn); 
    return 0; 
} 

此代碼編譯,但是當我運行它,它會在mysql_query()語句後退出。返回

以下錯誤:

Error 2006: MySQL server has gone away 

我用谷歌來搜索答案,並在這裏結束了:

http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

+1

嘗試使用127.0.0.1而不是本地主機的簡單的C程序。 – dave 2010-08-10 20:40:41

+0

你能打印這樣的每個語句的錯誤代碼嗎? http://www.cyberciti.biz/tips/linux-unix-connect-mysql-c-api-program.html – stacker 2010-08-10 20:44:04

回答

0

用戶的連接失敗 - 您的測試應該是:

if (mysql_real_connect(...) == NULL) { 
    printf("..."); 
    exit(1); 
} 

mysql_real_connect返回NULL on失敗或連接句柄成功。

--Dave

2

/*連接到MySQL數據庫服務器*/

#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); 
}