привет, я работаю над функцией, которая должна возвращать набор результатов базы данных и время, затраченное на запрос, чтобы получить данные. Работает хорошо, но я не знаю, как вернуть время и набор результатов и сделать их доступными в представлении. Спасибо за помощь.
Мой код выглядит так:
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, функция возвращает только одно значение
Но есть три способа вернуть несколько значений, я опубликую 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];
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;
Вам нужно вернуть массив. Может быть, просто добавьте его в $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;
Слишком неопытный. Я пошел с другой функцией, чтобы получить продолжительность. Но другие ответы очень помогли. Спасибо, здесь работает финальный код:
/* 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;
}