2011-12-22 32 views
0

出於某種原因,我不知道的時候,它會嘗試當程序崩潰執行計劃掛我每次執行一個查詢

mysql_query(mysql,"CREATE TABLE writers(name VARCHAR(25))"); 

雖然查詢被成功執行並表不生成,窗戶抱怨該程序停止響應,但它沒有。

這是我的主要功能。

int main() 
{ 
    MYSQL* mysql; 
    mysql_init(mysql); 
    mysql_real_connect(mysql,"localhost","root","xxxx","test",0,NULL,0); 
    mysql_query(mysql,"CREATE TABLE writers(name VARCHAR(25))"); // 'Program stops responding' without actually crashing. 
    mysql_close(mysql); 
    getchar(); 
    return 0; 
} 
+0

檢查返回值。他們說什麼?在你再次運行程序之前,你是否放棄了這個表格? – 2011-12-22 21:05:59

+0

不,沒有一個實際上崩潰。 Windows會彈出一個警告聲明程序已停止工作,但是當我單擊「確定」時,它會繼續並繼續執行getchar(); – 2011-12-22 21:07:01

+0

@Dave Rager是的,我使用HeidiSQL之前,我再次運行該程序。 – 2011-12-22 21:08:44

回答

7

您使用的API是錯誤的,你傳遞一個懸掛指針mysql_init不檢查一個返回值。不要這樣做。

您可以將您的代碼是這樣的:

MYSQL* mysql = mysql_init(NULL); 
if (!mysql) { 
    // HANDLE THE ERROR 
} 
if (!mysql_real_connect(mysql,"localhost","root","xxxx","test",0,NULL,0)) { 
    // HANDLE THE ERROR 
} 
if (mysql_query(mysql,"CREATE TABLE writers(name VARCHAR(25))")) { 
    // HANDLE THE ERROR 
} 
mysql_close(mysql); // No error checking here, that's ok, 
        // it doesn't report errors 
        // But just for this call. All others => check. 
getchar(); 
return 0; 
+0

非常感謝您的快速響應!上帝保佑你們! RIP Mj。 – 2011-12-22 21:17:13

+0

我相信mysql_query成功返回0。所以它應該讀 if(mysql_query(mysql,「CREATE TABLE writers(name VARCHAR(25))」)){ //處理錯誤 fprintf(stderr,「%s \ n」,mysql_error(mysql)) ; mysql_close(mysql); exit(1); } – Begui 2013-05-06 15:00:11

+0

@Begui:固定。令人驚訝的是沒有人抱怨過這一次......謝謝。 – Mat 2013-05-06 15:36:16