我不知道标题是否正确,无论如何这里是我需要的:
这是我的代码:
$start = microtime();
$string = $_POST['string'];
$matches = $SQL->prepare("SELECT * FROM `users` WHERE `name` LIKE ?");
$matches->execute(array('%'.$string.'%'));
echo "Done in: " . round($_GLOBALS['time'], 4);
foreach($matches->fetchAll() as $match) {
[..]
}
$end = microtime();
$time = $end - $start;
正如您所看到的,我正在测量查询的时间+显示记录,microtime()
需要位于foreach
的底部,但我需要显示测量的时间({{ 1}}变量)在foreach之前。正如你所看到的,我试图这样做:$time
但它总是返回0(null)。
我该怎么办?
答案 0 :(得分:1)
你应该这样做:
$start = microtime(true);
$string = $_POST['string'];
$matches = $SQL->prepare("SELECT * FROM `users` WHERE `name` LIKE ?");
$matches->execute(array('%'.$string.'%'));
$output = '';
foreach($matches->fetchAll() as $match) {
$output .= $someText;
[...]
}
$end = microtime(true);
$time = $end - $start;
echo "Done in: " . round($time, 4);
echo $output;
另外,请注意我使用true
的可选参数,因为这会将时间作为十进制数而不是documentation states的两部分返回。
答案 1 :(得分:0)
afuzzyllama 的答案是使用变量的一种方式。您还可以捕获foreach
循环的output into a buffer,echo
时间,然后从缓冲区输出:
$start = microtime();
$string = $_POST['string'];
$matches = $SQL->prepare("SELECT * FROM `users` WHERE `name` LIKE ?");
$matches->execute(array('%'.$string.'%'));
ob_start();
foreach($matches->fetchAll() as $match) {
[..]
}
$table = ob_get_contents();
ob_end_clean();
$end = microtime();
$time = $end - $start;
echo "Done in: " . round($GLOBALS['time'], 4);
echo $table;
另外,我不知道你为什么在这里使用$GLOBALS['time']
。
答案 2 :(得分:-1)
难道你不能在foreach之前使用microtime计算时间吗? e.g。
$start = microtime();
$string = $_POST['string'];
$matches = $SQL->prepare("SELECT * FROM `users` WHERE `name` LIKE ?");
$matches->execute(array('%'.$string.'%'));
echo "Done in: " . (microtime() - $start);
foreach($matches->fetchAll() as $match) {
[..]
}
$end = microtime();
$time = $end - $start;