MySQL 教材:C API 取得搜尋結果

接續前一節,假設主程式已經取得了搜尋的結果,儲存在記憶體內, 用一個名叫 qp 的指標指著。現在我們示範幾個跟 qp 有關的基本函式。 您可以想像 qp 指著一個表格,也就是一個雙足標序列 (矩陣)。 矩陣內的元素,全都屬於 char* 資料型態。 不論資料表中各欄位宣告的資料型態是什麼,MySQL 查詢的結果一律是字串。

以下程式片段得知 qp 所指的表格有幾列,每列幾欄。


unsigned int rows, cols;
rows = (unsigned int) mysql_num_rows(qp);
cols = (unsigned int) mysql_num_fields(qp);
printf("The result table has %u rows and %u columns\n", rows, cols);

以下程式片段每次從 qp 中抽取一列,直到全部抽完為止。 對每一列資料,把每個欄位的字串印出來,兩欄之間以 \t 隔開,兩列之間有一個 \n。
MYSQL_ROW row;
int i;
while ((row = mysql_fetch_row(qp)) != NULL) {
    for (i=0; i < cols; ++i) {
        if (i > 0)
            putchar('\t');
        printf("%s", row[i]);
    }
    putchar('\n');
}

注意上面紅色的那句話,乍看之下當然沒錯,但是其實有麻煩。 如果 MySQL 資料表內,有一欄是空的,則它對應的 row[i] 是 NULL pointer。 所以,那條紅色的指令並不完備,應該要改寫成
printf("%s", row[i] != NULL ? row[i] : "NULL");
這樣一來,如果 row[i] 是個 NULL pointer 則會輸出 "NULL" 字串, 否則就輸出資料庫原本的值。

因為 MySQL 搜尋的結果必然是字串,所以有必要的話,還需要透過 atof() 或是 atoi() 這些 C 函式,將字串轉成 double 或 int 型態。

習題

[BCC16-A]
單維彰 (02/06/02) ---
[Prev] [Next] [Up]