出現這種問題,我這裡遇到的原因是因為上一次查詢的結果集沒有釋放完全,導致查詢失敗 此時的錯誤內容是:Commands out of sync; you can't run this command now 該錯誤內容由mysql_error(conn)語句輸出。 如果你在上次查詢時忘了調用mysql ...
出現這種問題,我這裡遇到的原因是因為上一次查詢的結果集沒有釋放完全,導致查詢失敗
此時的錯誤內容是:Commands out of sync; you can't run this command now
該錯誤內容由mysql_error(conn)語句輸出。
如果你在上次查詢時忘了調用mysql_free_result();
那就回去加一行就可以了。
如果還是不好使,請繼續往下看。
很有可能你是在上次查詢中調用了多條SELECT語句或調用了存儲過程。在這種情況下,需要對mysql_real_connect()中的參數進行修改。
一般情況下,我們最後一個參數寫的是0,但是如果你調用了存儲過程,即返回集可能不只有一個,就需要將最後一個參數變成CLIENT_MULTI_STATEMENTS。
此外,該參數的其他值請參閱Mysql文檔或我查閱的中文網(非官方)。
假如你還是不好使,那麼你需要在原先釋放結果集的地方,將原來的代碼替換成
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