2014-07-22 81 views
0

我想創建一個函數,它返回數組中mysqli查詢的所有結果。只有mysqli fetch assoc只返回結果的一半

function Get(){ 
// verification... verification... 
    $res = $this -> link -> query("SELECT " . $select . " FROM " . $from); 
    while ($res->fetch_assoc()) 
    { 
     $row[] = $res->fetch_assoc(); 
    } 
    return $row; 
} 
i = 0; 
var_dump(Get()); 

的同時回報1,3,5,7,9導致

有人能解釋的結果呢?

回答

3

你做了兩次$ ref-> fetch_assoc();

while ($result = $res->fetch_assoc()) 
{ 
    $row[] = $result; 
} 
0

你應該改變你的代碼並運行:

while ($result = $res->fetch_assoc()) 
{ 
     $row[] = $result; 
} 

說明:

在你的循環您的代碼有while ($res->fetch_assoc())是什麼讓這第一個記錄是從結果採取和它被檢查這條記錄是否在數據庫中(它沒有記錄fetch_assoc返回false並且循環不再執行,但是你不把這個結果賦值給任何變量,所以這個結果簡單地消失了,然後在你的循環中使用$row[] = $res->fetch_assoc();所以你從數據庫中獲取第二條記錄。現在循環再次執行。這是如何工作的。

0

$res->fetch_assoc()調用返回結果集中的單個行,並將結果集的內部指針遞增1。由於您致電Get()致電fetch_assoc幾次,您的結果不符合您的期望。如果您想獲得單行結果,請致電fetch_assoc一次。如果您想返回結果集中的所有行,請執行如下操作:

function Get(){ 
    // verification... verification... 
    $res = $this -> link -> query("SELECT " . $select . " FROM " . $from); 
    $rows = array(); 

    while($row = $res->fetch_assoc()) { 
     $rows[] = $row; 
    } 

    return $rows; 
} 

var_dump(Get());