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

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

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

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>

1

Решение

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

1. Список PHP :

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

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

2. Использовать массив :

    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;
1

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

/* 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;
}
0
По вопросам рекламы [email protected]