2011-06-03 98 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循环都会完成其工作。