2011-07-06 35 views
0

當我運行第一個查詢時,mysql_real_query返回1,據我所知,這是正常的,我必須調用mysql_errno()和mysql_error()來獲取有關錯誤的信息。但爲什麼mysql_error()返回一個NULL字符串?mysql_real_query返回1,mysql_error返回NULL字符串

運行第二個查詢或mysql_ping後,我收到違規異常。 任何線索發生了什麼?

此外,我應該在C++程序中使用C++連接器還是可能C連接器(這是我使用的)也適用。我需要在我的編譯器下編譯它才能使用它嗎?

這是我使用的代碼的一部分,這可以幫助別人找到我的解決方案。我不知道這裏有什麼問題。

char req[50]; 
static char *serverOptions_p[] = { 
    "abc", 
    "--datadir=C:/Documents and Settings/All Users/Application Data/MySQL/MySQL Server 5.5/data/abc", 
    "--language=C:/Program Files/MySQL/MySQL Server 5.5/share/english", 
    NULL 
}; 
int numElements = sizeof (serverOptions_p)/sizeof(char *) - 1; 
static char *serverGroups_p[] = { "mysql_server", NULL }; 
if (mysql_library_init(numElements, serverOptions_p, (char **) serverGroups_p)) { 
    return; 
} 

d_connectionHandle_p = mysql_init(NULL); 

if (d_connectionHandle_p) { 
    my_bool mb = true; 
    mysql_options(d_connectionHandle_p, MYSQL_OPT_RECONNECT, &mb); 
    if (mysql_real_connect(d_connectionHandle_p, server_p, user_p, password_p, database_p, 0, NULL, 0)) { 
     sprintf(req, "CREATE DATABASE %s", database_p); 
     mysql_real_query(d_connectionHandle_p, requete, strlen(requete)); 
    } 
} 
else { 
    return; 
} 

int e; 
strcpy(req, "SELECT * FROM test"); 

if ((e = mysql_real_query(d_connectionHandle_p, req, strlen(req))) != 0) { // This is where it returns 1 
    const char *err = mysql_error(d_connectionHandle_p); // Returns an empty string 
    if (err) 
    { 
    } 
} 
+0

要回答你的問題之一,不,還有用C編寫的MySQL連接器在C++中沒有問題。 –

+0

你有沒有得到這個工作?我處於完全相同的情況。 –

+0

糟糕。在我的情況下,它只是查詢字符串的長度(mysql_real_query的第三個參數),它錯誤地提供了。 –

回答

0

根據the manual,一個非零返回值意味着發生了錯誤:

Return Values 

Zero if the statement was successful. Nonzero if an error occurred. 
+1

是的,但通常錯誤編號導致解釋,但1並不意味着什麼,即使mysql_error返回一個NULL字符串。 – user6604390