Как отобразить время выполнения MySQL-запроса в PHP?

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

Вот что я сделал до сих пор.

Я начал с включения профилирования путем прямого ввода в текстовое поле и запуска скрипта:

set global profiling = 1 

Используя предоставленное текстовое поле, введите следующий запрос:

 select @@profiling 

И получить:

 1 

Наконец, я запускаю запрос так:

 select * from log 

Однако, когда я запускаю команду для профилирования запроса:

 show profiles 

Я не получаю никакого результата, и на странице не отображается содержание.

Поскольку я не вижу таблицы после команды «показать профили», значит ли это, что нет достаточных привилегий или мне не хватает другого шага?

Я следовал процедуре:

Измерение фактического времени выполнения MySQL

Пожалуйста, порекомендуйте.

Мой PHP-код выглядит следующим образом:

 <?php if($_POST) { $db = new PDO('mysql:host=localhost;dbname=<dbname>;charset=utf8', 'user', 'pass'); $stmt = $db->prepare($_POST['query']); $stmt->execute(); $records = $stmt->fetchAll(PDO::FETCH_ASSOC); $errmsg = $stmt->errorInfo()[2]; //Output the error message - Index 2 of the array echo $errmsg; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>Log</title> </head> <body> <form method="post" id="queryform"> <div class="label"> <span class="label">Enter SQL Query</span> </div> <div class="input"> <input type="text" name="query" size="150" value="<?=$_POST['query']?>" /> </div> </form> <? if (isset($records)): ?> <table border="1"> <? foreach($records as $record): ?> <tr> <? foreach($record as $colname => $value): ?> <td> <?=$value;?> </td> <? endforeach; ?> </tr> <? endforeach; ?> </table> <? endif; ?> </body> </html> 

Любая помощь будет оценена по достоинству.

Это работало как прелесть!

  $db->query('set profiling=1'); //optional if profiling is already enabled $db->query($_POST['query']); $stmt = $db->query('show profiles'); $db->query('set profiling=0'); //optional as well $records = $stmt->fetchAll(PDO::FETCH_ASSOC); $errmsg = $stmt->errorInfo()[2]; //Output the error message 

UPDATE (Ниже приведена следующая работа над innodb на моей нынешней настройке)

 $db->query('set profiling=1'); //optional if profiling is already enabled $db->query($_POST['query']); $res = $db->query('show profiles'); $records = $res->fetchAll(PDO::FETCH_ASSOC); $duration = $records[0]['Duration']; // get the first record [0] and the Duration column ['Duration'] from the first record 

Результат (показать профили) из phpmyadmin.

 Query_ID Duration Query 1 0.00010575 SELECT DATABASE() 

Получение фактического (абсолютного) времени выполнения последнего запроса в PHP (исключая латентность сети и т. Д.)

Как насчет этого:

 $start = microtime(true); $stmt->execute(); $end = microtime(true); echo "This query took " . ($end - $start) . " seconds.";