2008-11-07 53 views
2

我正在使用MySQL C API來查詢數據庫,並將結果存儲在MYSQL_ROW類型中。我能夠將結果打印到控制檯,但是根據MySQL C API文檔,我不能使用它們作爲以空字符結尾的字符串。但是,根據MySQL C API文檔,我不能使用它們作爲以空字符結尾的字符串。MySQL C API使用結果

the function overview的底部,他們說我可以用mysql_store_result()mysql_use_result()「提取」信息。但是,我仍然對這是如何完成感到困惑。

理想情況下,我想使用結果作爲一個字符串,所以我可以做的東西一樣strcmp,但否則我一定要與這兩個函數以某種方式使用的信息。

有人可以告訴我一個如何做到這一點的例子嗎?

回答

4

基本上,您調用mysql_store_result()或mysql_use_result()來訪問結果集,前者將所有行裝載到客戶端的內存中,後者從服務器一次訪問一行。如果你使用mysql_use_result(),你需要調用mysql_fetch_row()來訪問每一行,直到函數返回NULL。每次成功調用mysql_fetch_row()都會返回一個MYSQL_ROW,您可以使用它來訪問各個字段值。

由於字段是不是空終止的,你需要使用mysql_fetch_lengths()來獲得每個字段的長度,這樣就可以通過memcpy的其他地方複製它們,等

由於字段值如果你想將它作爲一個字符串使用,你將需要添加你自己的NUL字符。請注意,字段值可能包含二進制數據,因此如果您將其視爲字符串,那麼期望C字符串的函數將在數據遇到空字符時停止處理數據。

下面是從文檔的例子,應該幫助你把這個放在一起:

MYSQL_ROW row; 
unsigned int num_fields; 
unsigned int i; 

num_fields = mysql_num_fields(result); 
while ((row = mysql_fetch_row(result))) 
{ 
    unsigned long *lengths; 
    lengths = mysql_fetch_lengths(result); 
    for(i = 0; i < num_fields; i++) 
    { 
     printf("[%.*s] ", (int) lengths[i], 
       row[i] ? row[i] : "NULL"); 
    } 
    printf("\n"); 
} 
+0

感謝,所以我可以得到的長度,但是如果我要得到的東西,被存儲爲VARCHAR數據庫?這是否意味着我不能在結果中使用strcmp? – Steve 2008-11-07 01:24:36