2011-06-03 100 views
1

我遇到了最簡單的一段代碼的麻煩。出於某種原因,以下代碼僅檢索數據庫中的第一行。我正在嘗試一段時間循環,它只是不適合我。這裏是我的代碼:幫助PHP雖然循環

<?php 


//Connect to the database 
require_once('mysql_connect.php') ; 

$query = "SELECT * FROM past_due_students WHERE charged_today = 'No' ORDER BY past_due_id" ; 
$result = mysqli_query($dbc, $query) ; 
$number_of_students = mysqli_num_rows($result) 

if ($number_of_students >= 1) { 

    //Loop through the entire table 
    while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) { 

     $student_id = $row['student_id'] ; 
     $number_of_declines = $row['number_of_declines'] - 1; 

     //Update the number of declines 
     $query = "UPDATE past_due_students SET number_of_declines = $number_of_declines WHERE student_id = $student_id" ; 
     $result = mysqli_query($dbc, $query) ; 
     $number = mysqli_affected_rows($dbc) ; 

     if ($number == 1) { 

      echo '<p><b>The number of declines has been successfully updated.</b></p>' ; 

     } else { 
      echo $query ; 
     } 

    }//END while loop 

}//END if ($number_of_students >= 1) { 

?> 

它只抓取第一行,沒有其他行。任何幫助是極大的讚賞。

+0

'$ number_of_students = mysqli_num_rows($ result)'後缺少';'。除此之外:var_dump($ number_of_students);'給了什麼? – 2011-06-03 15:54:17

回答

4

您將要覆蓋的$result值:

$query = "SELECT * FROM past_due_students....." ; 
$result = mysqli_query($dbc, $query) ; 

//Loop through the entire table 
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) { 

    $query = "UPDATE past_due_students SET ...." ; 
    $result = mysqli_query($dbc, $query) ; <-- OVERWRITTING HERE. 

使用不同的變量保持內查詢結果對象。

1

通過將下一個查詢資源分配給同一個變量,您正在銷燬從SELECT查詢獲得的$result資源。

請爲UPDATE查詢使用不同的變量。

所以更改此設置:

$query = "UPDATE past_due_students SET number_of_declines = $number_of_declines WHERE student_id = $student_id" ; 
$result = mysqli_query($dbc, $query) ; 

要這樣:

$query = "UPDATE past_due_students SET number_of_declines = $number_of_declines WHERE student_id = $student_id" ; 
$updateResult = mysqli_query($dbc, $query) ; 
0

嘗試改變更新查詢的$結果與其他變量名

0

你覆蓋在$result VAR你循環它看起來像。您的第二個mysqli_affected_rows也正在傳遞數據庫對象。

變化

$result = mysqli_query($dbc, $query) ; 
$number = mysqli_affected_rows($dbc) ; 

$result2 = mysqli_query($dbc, $query) ; 
$number = mysqli_affected_rows($result2) ; 
0

我想是因爲要覆蓋$result變量。

此外,在附註中,您不需要if ($number_of_students >= 1)。無論返回結果的數量如何,while循環都會完成其工作。