2014-02-26 20 views
0

這樣的while循環工作正常工作:PHP while循環不與用戶定義函數

$results = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id); 

while($data = mysqli_fetch_array($results)) { 
    echo '<tr> 
     <td>' . $data['name'] . '</td> 
     <td>' . $data['date'] . '</td> 
     </tr>' 
} 

但是它不希望與用戶定義函數的工作。這只是循環的第一行無限:

function camp_data() { 
    global $user_id; 
    $query = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id"); 
    return (mysqli_fetch_array($query)); 
} 

while($data = camp_data()) { 
    echo '<tr> 
     <td>' . $data['name'] . '</td> 
     <td>' . $data['date'] . '</td> 
     </tr>' 
} 

當我做print_r(mysqli_fetch_array($results))print_r(camp_data()) - 都返回絕對相同的陣列。 這裏有什麼問題?

在每次調用camp_data(所有代碼互爲作用),而不僅僅是最後一行
+0

語法higligher顯示了一些語法錯誤! –

+0

檢查$ dbcon是否在函數內可用!! –

回答

4

不管你從外部調用函數多少次,它只會在第一行執行mysqli_fetch_array()。第二次調用該函數(在外部循環的第二次迭代中)將不會知道它在之前被執行,並且不會繼續到下一行。同時在數組上循環並不是最好的選擇,它可能會導致無限循環。

您必須遍歷函數中的結果並構建它們的數組。返回mysqli_fetch_array,不循環。

while($data = mysqli_fetch_array($results)) { 
    $rows[] = $data; 
} 
return $rows 

,然後在你的函數執行foreach()

foreach (camp_data() as $data) { 
    echo '<tr> 
    <td>' . $data['name'] . '</td> 
    <td>' . $data['date'] . '</td> 
    </tr>' 
} 
0

,所以重構它:

function camp_data($query) { 
    return (mysqli_fetch_array($query)); 
} 

//execute query only once 
$query = mysqli_query($dbcon, "SELECT `name`, `date` FROM `table1` WHERE `user` = $user_id"); 

//fetch result row by row 
while($data = camp_data($query)) { 
    echo '<tr> 
     <td>' . $data['name'] . '</td> 
     <td>' . $data['date'] . '</td> 
     </tr>' 
} 

當你看到在這種情況下,方法camp_data僅供mysqli_fetch_array簡單的包裝,所以它可以由mysqli_fetch_array替換

+0

毫無意義,不是嗎? –