Получение фактического (абсолютного) времени выполнения последнего запроса в PHP (исключая задержки в сети и т. Д.) - PullRequest
5 голосов
/ 27 октября 2010

Я хочу получить фактическое время выполнения запроса Mysql, пока они выполняются в моем проекте, поэтому запуск PHP microtime() до и после и вычитание не будут работать.

Когда мы запускаем запрос в командной строке, результат отображает информацию о времени примерно так: -

xxx rows affected in YY sec

Как получить ту же информацию о времени, используя PHP. Я искал в PHP-функциях Mysql в другом вопросе SO Здесь и здесь , но не получил ничего подобного. Нет ли такой функции PHP, как mysql_error(), mysql_affected_rows(), которая возвращает другую важную информацию? Если нет, то почему его там нет? Есть рассуждения?

Кто-то говорит -

Я думаю, что лучший способ добиться исполнения время использовать некоторое выполнение программы такие функции, как exec () или system ().

Есть ли у кого-нибудь работающий код PHP, который возвращает фактическое время выполнения?

1 Ответ

11 голосов
/ 27 октября 2010

попробуйте это:

<?php

$host='localhost';
$username='testing';
$password='testing';
$dbname='test';

$DBC = new mysqli($host,$username,$password,$dbname);

$DBC->query('set profiling=1');
$DBC->query('SELECT * FROM abc');
if ($result = $DBC->query("SHOW profiles", MYSQLI_USE_RESULT)) {


    while ($row = $result->fetch_row()) {
        var_dump($row);
    }
    $result->close();
}
if ($result = $DBC->query("show profile for query 1", MYSQLI_USE_RESULT)) {


    while ($row = $result->fetch_row()) {
        var_dump($row);
    }
    $result->close();
}
$DBC->query('set profiling=0');

?>

первый if дает вам общее время выполнения вашего запроса, например:

array(3) { [0]=>  string(1) "1" [1]=>  string(10) "0.00024300" [2]=>  string(17) "SELECT * FROM abc" }

второй if, который дает вам время выполнения запроса. результаты должны быть точными, так как вы используете внутренний профилировщик mysql.

...