C語言鏈接Mysql數據庫,執行mysql_query()或mysql_real_query()時出錯,即返回值爲1解決辦法

出現這種問題,我這裏遇到的緣由是由於上一次查詢的結果集沒有釋放徹底,致使查詢失敗html

此時的錯誤內容是:Commands out of sync; you can't run this command nowmysql

該錯誤內容由mysql_error(conn)語句輸出。sql

 

若是你在上次查詢時忘了調用mysql_free_result();數據庫

那就回去加一行就能夠了。api

若是仍是很差使,請繼續往下看。ide

 

頗有可能你是在上次查詢中調用了多條SELECT語句或調用了存儲過程。在這種狀況下,須要對mysql_real_connect()中的參數進行修改。fetch

通常狀況下,咱們最後一個參數寫的是0,可是若是你調用了存儲過程,即返回集可能不僅有一個,就須要將最後一個參數變成CLIENT_MULTI_STATEMENTS。this

此外,該參數的其餘值請參閱Mysql文檔我查閱的中文網(非官方)url

 

假如你仍是很差使,那麼你須要在原先釋放結果集的地方,將原來的代碼替換成spa

    while (!mysql_next_result(conn))
    {
        res = mysql_store_result(conn);
        mysql_free_result(res);
    }

其中conn是鏈接句柄,res是結果集

下面給上個人所有代碼,該代碼僅供參考,我將個人主機名刪去了。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <mysql/mysql.h>
 4 int main()
 5 {
 6     int temppppp;
 7     char sql[100];                                                   //存放SQL語句
 8     char host[46] = ""; //MySQL數據庫主機名
 9     char dburl[8] = "normal";                                        //數據庫名稱
10     const char username[9] = "arknight";                             //用戶名
11     const char password[9] = "arknight";                             //密碼
12     unsigned int port = 3306;                                        //端口號
13     MYSQL *conn;                                                     //Mysql鏈接指針
14     MYSQL_RES *res;                                                  //Mysql結果集
15     MYSQL_ROW row;                                                   //行變量
16     printf("正在嘗試鏈接數據庫\n");
17     if ((conn = mysql_init((MYSQL *)0))                                                                                                                                       //初始化MYSQL
18         && (mysql_options(conn, MYSQL_SET_CHARSET_NAME, "utf8") == 0)                                                                                                         //開始鏈接
19         && mysql_set_server_option(conn, MYSQL_OPTION_MULTI_STATEMENTS_ON) 
20         && mysql_real_connect(conn, host, username, password, dburl, port, NULL, CLIENT_MULTI_STATEMENTS)) //鏈接成功
21     {
22         puts("鏈接成功");
23     }
24     else
25     {
26         puts("沒法鏈接數據庫");
27         exit(-1);
28     }
29 
30     int i = 0;
31     int ret = 0;
32 
33     strcpy(sql, "call gettype");
34     puts(".............................................");
35     ret = mysql_real_query(conn, sql, strlen(sql));
36     printf("******%d\n", ret);
37     res = mysql_store_result(conn);
38     i = (int)mysql_num_rows(res);
39     for (int a = 0; a < i; a++)
40     {
41         row = mysql_fetch_row(res);
42         if (row == NULL)
43         {
44             break;
45         }
46         printf("%s\t%s\n", row[0], row[1]);
47     }
48     while (!mysql_next_result(conn))
49     {
50         res = mysql_store_result(conn);
51         mysql_free_result(res);
52     }
53     //輸出完成
54     printf("FINISHED\n");
55 
56     strcpy(sql, "select * from showall");
57     puts(".............................................");
58     ret = mysql_real_query(conn, sql, strlen(sql));
59     printf("%s", mysql_error(conn));
60     printf("******%d\n", ret);
61     res = mysql_store_result(conn);
62     i = (int)mysql_num_rows(res);
63     for (int a = 0; a < i; a++)
64     {
65         row = mysql_fetch_row(res);
66         if (row == NULL)
67         {
68             break;
69         }
70         printf("%s\t%s\t%s\t%s\t%s\n", row[0], row[1], row[2], row[3], row[4]);
71     }
72     while (!mysql_next_result(conn))
73     {
74         res = mysql_store_result(conn);
75         mysql_free_result(res);
76     }
77 
78     mysql_close(conn);
79     return 0;
80 }
View Code
相關文章
相關標籤/搜索