возвращать несколько значений (переменных) с помощью PHP

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

Мой код выглядит так:

public function getNumResults($term) {

   /* Count query Execution */
   $starttime = microtime(true);

   $query = $this->con->prepare("SELECT COUNT(*) as total
       FROM sites WHERE title LIKE :term
       OR url LIKE :term
       OR keywords LIKE :term
       OR description LIKE :term");

   $endtime = microtime(true);

   /* Calculates total time taken */
   $duration = $endtime - $starttime;

   $searchTerm = "%". $term . "%";
   $query->bindParam(":term", $searchTerm);
   $query->execute();

   $row = $query->fetch(PDO::FETCH_ASSOC);

   return $row["total"];

}

В представлении я возвращаю результат так:

<div class="mainResultSection">
        <?php
          $resultsProvider = new SearchResultsProvider($con);
          $numResults = $resultsProvider->getNumResults($term);
          /* Not working */
          $timeResults = $resultsProvider->getNumResults($term)->duration;
          echo "<p class='resultsCount'>$numResults results found. In $timeResults <p>";
        ?>
      </div>

php,mysql,database,resultset,multiple-resultsets,

1

Ответов: 3


1

Вы не можете вернуть две переменные в функции PHP, функция возвращает только одно значение. Но есть три способа, которыми я знаю, чтобы вернуть несколько значений, я отправлю по 3 примера для каждого из них

1. Список PHP :

    function retmulti()
    {
        return array(4,5,6);
    }

    list($a,$b,$c) = retmulti();

2. Используйте Array :

    function retmulti()
    {
        return array(1,2,3);
    }

    $array = retmulti();
    $a = $array[1];
    $b = $array[2];
    $c = $array[3];

3. Использовать класс

    class newClass
    {
        public $a;
        public $b;
        public $c;
    }

    function retmulti()
    {
        $retobj = new newClass();

        $retobj->a = 4;
        $retobj->b = 5;
        $retobj->c = 6;

        return $out;
    }
    $abc = retmulti();
    $a= $abc->a;
    $b = $abc->b;
    $c = $abc->c;

1

Вам нужно вернуть массив. Возможно, просто добавьте его $row. Кроме того, вам нужно получить время начала до запроса и получить время окончания:

   //other code

   $starttime = microtime(true);
   $query->execute();
   $endtime = microtime(true);
   $row = $query->fetch(PDO::FETCH_ASSOC);
   $row["duration"] = $endtime - $starttime;

   return $row;

Или для вашего текущего кода вы можете просто добавить его к переменной объекта:

   $this->duration = $endtime - $starttime;

Затем выполните следующие действия:

   $timeResults = $resultsProvider->duration;

0

Слишком неопытный. Я пошел с другой функцией, чтобы получить продолжительность. Но другие ответы дали много. Спасибо, здесь последний код работает:

/* Time to get results */
public function getTimeResult($term){
   $query = $this->con->prepare("SELECT COUNT(*) as total
        FROM sites WHERE title LIKE :term
        OR url LIKE :term
        OR keywords LIKE :term
        OR description LIKE :term"
   );

   $searchTerm = "%". $term . "%";
   $query->bindParam(":term", $searchTerm);

   $starttime = microtime(true);
   $query->execute();
   $endtime = microtime(true);

   /* Calculates total time taken */
   $duration = $endtime - $starttime;

   return $duration;
}
PHP, MySQL, базы данных, ResultSet, многооконные результирующие,
Похожие вопросы