Как использовать цикл while в PHP? - PullRequest
1 голос
/ 03 июня 2011

У меня проблемы с самым простым фрагментом кода. По какой-то причине следующий код извлекает только первую строку из базы данных. Я пробую цикл времени, и он просто не работает для меня. Вот мой код:

<?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) {

?>

Он захватывает только первый ряд, но ни один из других рядов.

Ответы [ 4 ]

4 голосов
/ 03 июня 2011

Вы перезаписываете значение $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 голос
/ 03 июня 2011

Вы уничтожаете ресурс $result, полученный из запроса SELECT, присваивая следующий ресурс запроса той же переменной.

Пожалуйста, используйте другую переменную для запроса 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 голосов
/ 03 июня 2011

Вы перезаписываете переменную $result в вашем цикле, как это выглядит.Также вашему второму mysqli_affected_rows передается объект базы данных.

Измените

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

на

$result2 = mysqli_query($dbc, $query) ;
$number = mysqli_affected_rows($result2) ;
0 голосов
/ 03 июня 2011

попытаться изменить $ результат запроса на обновление с другим именем переменной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...