0

タイトルが正しいかどうかはわかりませんが、とにかくここに必要なものがあります:

これは私のコードです:

$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の前にforeach測定された時間($time変数)を表示する必要があります。ご覧のとおり、私はこれを次のように実行しようとしましecho "Done in: " . round($_GLOBALS['time'], 4);たが、常に0(null)を返します。

私は何をすべきか?

4

3 に答える 3

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されている2つの部分ではなく、10進数として時刻を返すためです。

于 2011-10-09T16:01:33.757 に答える
0

afuzzyllamaの答えは、変数を使用する1つの方法です。foreachループの出力をバッファにキャプチャし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']ここで使用しているのかわかりません。

于 2011-10-09T16:09:55.907 に答える
-1

foreachの前のマイクロタイムを使用して時間を計算することはできませんか?例えば

$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;
于 2011-10-09T15:59:52.263 に答える