Итерация по нескольким строкам и вывод результата внутри функции - PullRequest
1 голос
/ 10 апреля 2020

У меня есть файл PHP для одной из страниц моего сайта, на котором есть весь мой код HTML и PHP. У меня есть таблица на веб-сайте, и я хочу заполнить ее данными из таблицы SQL. В настоящее время у меня есть весь код (HTML, Javascript, SQL, PHP) в одном файле, называемом "modules. php". Это код, который я должен заполнить таблицу:

<?php
      // Shows all the modules in the table
      $module_sql = "SELECT *, course.course_name FROM module INNER JOIN course on module.course = course.course_id";
      $module_qry = mysqli_query($link, $module_sql);
      while ($module = mysqli_fetch_array($module_qry)) { ?>
        <tr>
          <td><?php echo $module['module_name']; ?></td>
          <td><?php echo $module['course_name']; ?></td>
          <td><?php echo $module['perc_worth']; ?></td>
          <td><?php echo $module['credit']; ?></td>
          <td><?php echo $module['uni_year']; ?></td>
        </tr>
      <?php } ?>

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

Теперь я делаю файл класса «запросы. php», который будет содержать все мои SQL код в отдельных функциях. Я буду вызывать каждую функцию из моего файла "module. php". Пока это прекрасно работает, когда мне нужно только выполнить запрос или вернуть одну строку из базы данных, но у меня возникают проблемы, когда мне приходится возвращать несколько строк из базы данных. Вот код, который я реализовал до сих пор:

запросов. php

    function executeGetQry($qry) {
        $execute = mysqli_query($this->databaseConnect(), $qry) or die(mysqli_error(
            $this->databaseConnect()));

        if ($execute == null) {
            return null;
        } else {
            return mysqli_fetch_array($execute);
        }
    }

    function getAllModules() {
        $module_sql = "SELECT *, course.course_name FROM module INNER JOIN course on module.course = course.course_id";
        return $this->executeGetQry($module_sql);
    }

модуль. php

         <?php
          while ($module = $query->getAllModules()) { ?>
            <tr>
              <td><?php echo $module['module_name']; ?></td>
              <td><?php echo $module['course_name']; ?></td>
              <td><?php echo $module['perc_worth']; ?></td>
              <td><?php echo $module['credit']; ?></td>
              <td><?php echo $module['uni_year']; ?></td>
            </tr>
          <?php } ?>

Однако это не работает, потому что каждый раз, когда выполняется «while» l oop, он просто запускает функцию снова и снова и снова возвращает одну и ту же строку и никогда не повторяет и не возвращает другие строки .

ВОПРОС: Как исправить мою функцию, чтобы она перебирала все строки и return каждую строку в виде массива, чтобы я мог успешно поместить все свои SQL в другой файл и получить тот же результат?

У меня есть несколько SQL запросов, где мне нужно будет перебрать результаты, поэтому я думаю, что мне нужно исправить мою executeGetQuery функцию.

1 Ответ

1 голос
/ 10 апреля 2020

Поскольку mysqli_fetch_array() возвращает только одну строку при каждом вызове, это не будет работать как возвращаемое значение из getAllModules().

Вы можете получить getAllModules() return $execute, тогда ваш PHP код будет:

    <?php
        $execute = $query->getAllModules();
        while ($module = mysqli_fetch_array($execute)) { ?>
        <!-- your table row -->
    <?php } ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...