出現這種問題,我這裏遇到的緣由是由於上一次查詢的結果集沒有釋放徹底,致使查詢失敗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 }