出現這種問題,我這里遇到的原因是因為上一次查詢的結果集沒有釋放完全,導致查詢失敗
此時的錯誤內容是: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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/13782.html
標籤:C
