2011-12-22 67 views
1

簡單的問題我猜,但一個基本的問題,我不知道最佳實踐。通過PHP從MySQL獲取數據 - 我做對了嗎?

假設我有一個數據庫,其中包含一些我想要顯示給用戶的IP地址。

這是一種很好/安全的方式/練習嗎?

//--> CONNECT TO DB, etc 

$db_query = 'SELECT ip,' 
     ."FROM table " 
     ."GROUP BY ip "; 

$result = $db_conn->query($db_query); 
echo 'Found '.$result->num_rows.' records'; 

if($result->num_rows > 0) { 

    while($row = $result->fetch_array(MYSQLI_BOTH)) 
    { 
     //POPULATE A HTML TABLE/WHATEVER WITH THE INFO 
    } 
} 

我最關注一下:$result->num_rows > 0這:fetch_array(MYSQLI_BOTH)

我這麼問是因爲我讀的地方,num_rows > 0通常是指根據情況麻煩,比如用戶登錄。在這種情況下,我想它會num_rows == 1對不對?

另外,我還沒有完全理解MYSQLI_BOTH和其他形式的讀取之間的區別。如果你可以簡單地向我解釋它們以及何時使用它們,我將不勝感激。

您認爲如何?

+0

對我來說看起來完全合理。 – 2011-12-22 15:16:21

+0

看起來不錯,但在上面的問題中缺少一些代碼。猜猜你想添加一個粗體文本或類似的東西。無論如何,它看起來不錯。取決於你真正想要的,如果你將用相同的IP地址進行分組,你只會得到一個結果,所以也許你不需要WHILE,但它也可以用一個結果工作,所以沒關係。 – StudioArena 2011-12-22 15:20:39

+0

你好Eric和StudioArena,我已經編輯了上面的問題,增加了兩個具體問題。如果你可以再看一次... StudioArena,讓我們假設這個特定的查詢,我會得到不止一行。 – Ion 2011-12-22 15:21:50

回答

4

我想補充一個檢查,以確保您的查詢是OK執行 - 如果沒有輸出錯誤:

$result = $db_conn->query($db_query); 
// check for error - output the error 
if (!$result) { 
    $message = 'Invalid query: ' . mysqli_error() . "\n"; 
    $message .= 'Whole query: ' . $db_query; 
    die($message); 
} 
echo 'Found '.$result->num_rows.' records'; 

除此之外...看起來OK

編輯:

要解釋MYSQLI_BOTH,選項有MYSQLI_ASSOC,MYSQLI_NUM,或MYSQLI_BOTH - >

  • MYSQLI_ASSOC =關聯數組這樣的行的值可以利用$row['column']
  • MYSQLI_NUM =數字陣列,使得該行的值是使用數$row[n]其中n是(基於0)的列的數目訪問進行訪問
  • MYSQLI_BOTH =可以同時使用以行的訪問值要麼$row[n]$row['column']

EDIT2:

還有用於檢查返回的行數的函數:

if(mysqli_num_rows($result) == 0){ 
    echo "Sorry. No records found in the database";       
} 
else { 
    // loop you results or whatever you want to do 
} 

EDIT3:

php.net has some excellent docs for the MY_SQLI extension

1

兩件事情:

  1. 如果你只需要一個關聯數組,那麼不要使用fetch_array()。使用fetch_assoc()

  2. 有沒有必要來連接這樣的查詢,你可以使用類似:

    $ SQL = 「

    SELECT 
        ip 
    FROM 
        table 
    

    」;

這有助於在WHERE子句或JOIN中具有多個選項的大型查詢。輸入更快,您可以快速複製並粘貼它以檢查phpMyAdmin等。