Вызов функции из цикла while вызывает бесконечный цикл - PullRequest
0 голосов
/ 29 июня 2018

У меня есть оператор MySQLi в функции следующим образом:

function getTimeData($time) {
    $con = mysqli_connect("domain:port", "user", "password", "dbname") or die (mysql_error());
    $selectedDate = $_SESSION['date'];

    $prepTimeData = mysqli_prepare($con, "SELECT * FROM `time` WHERE `date`=? AND `time`<=? AND `endTime`>=?");
    $prepTimeData->bind_param("sss", $selectedDate, $time, $time);
    $prepTimeData->execute();
    $getTimeData = $prepTimeData->get_result();

    return $getTimeData;
  }

, а затем цикл while для перебора всех результатов:

while ($data0800 = getTimeData("0800")->fetch_assoc()) {
?><tr><td><?php $data0800['first_name'];?></td>
<td><?php $data0800['riderage'];?></td>
<td><?php $data0800['ridinglevel'];?></td>
<td><?php $data0800['horse'];?></tr><?php
                      }

Это приводит к тому, что таблица просто становится бесконечно большой, фактически не заполняя то, что должна. Однако операторы вне функции работают нормально.

1 Ответ

0 голосов
/ 29 июня 2018

Вы звоните по следующему коду;

while ($data0800 = getTimeData("0800")->fetch_assoc()) {

Кажется достаточно справедливым, верно? Но каждый раз, когда цикл while вызывается, вызывается функция, что означает, что выполняется новый запрос, что, в свою очередь, означает, что он никогда не достигает конца, когда значение сбрасывается в первую найденную строку, вместо вызова функции каждый раз при цикле цикла использование следующего для отделения вызова функции от цикла должно заставить его работать так, как вы ожидаете, собирая каждую строку по очереди;

$timedata = getTimeData("0800");
while ($data0800 = $timedata->fetch_assoc()) {

Это потому, что вы вызываете свою функцию только один раз и сохраняете ее результат в переменной $timedata, а не обновляете запрос и набор результатов каждый раз, когда проходите цикл

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