2014-05-12 29 views
1

我正在使用C++爲MySQL數據庫編寫程序。我試圖通過比較列的長度(以字節爲單位)來通過/失敗來檢查條件。下面是代碼:C++中MySQL列的字節長度

while (row = mysql_fetch_row(result)) 
{ 
    lengths = mysql_fetch_lengths(result); 
    num_rows = mysql_num_rows(result); 

    for (i = 0; i < num_fields; i++) 
    { 
     if (strstr(fields[i].name, "RSSI") != NULL) 
     { 
      if (lengths[*row[i]] == ??) 
       printf("current value is %s \t", row[i]); 
     } 
    } 
} 

所以基本上我所試圖做的是尋找在列字符串「RSSI」,如果該字符串是目前我想打印該值。如果存在,每列中的值是3個字節。那麼我如何檢查長度[*行[i]]是否是3個字節的長度?謝謝

+0

你看長度調試器中的變量? – dutt

回答

3

根據official MySQL documentationmysql_fetch_lengths返回一個數組unsigned long與當前行的列的長度。雖然描述不清楚它是以字節還是其他的方式,但是所示的例子澄清了它。所以你應該直接檢查3

此外,還有一些語法和語義錯誤,並在代碼中的可能的重構,其中以下:

  • 鑑於lengths變量是與當前行的長度的陣列,所述表達lengths[*row[i]]應該只是lengths[i],因爲i是當前列的索引。
  • for中的兩個if可能與&&合併,以提高可讀性。
  • 某些變量未被正確定義或使用。

的代碼應該是這樣的:

// Properly assign a value to fields variable. 
fields = mysq_fetch_fields(result); 

// Getting the number of fields outside the loop is better. 
num_fields = mysql_num_fields(result); 

while (row = mysql_fetch_row(result)) 
{ 
    lengths = mysql_fetch_lengths(row); 

    for (i = 0; i < num_fields; i++) 
     if (strstr(fields[i].name, "RSSI") != NULL && lengths[i] == 3) 
       printf("current value is %s \t", row[i]); 

    printf("\n"); // For better output print each row in a new line. 
} 

你真的應該仔細閱讀文檔,以避免使用錯誤的函數編譯或邏輯錯誤。

+1

好的答案,並且在內部條件下執行strstr()之前檢查長度[i] == 3可能會更高效。 – ggiroux

+0

的確,你是完全正確的。我剛剛從頭頂修改了原始版本。 – Oxfist