获取 PHP 中最后一个查询的实际(绝对)执行时间(不包括网络延迟等)

发布于 2024-09-28 22:03:03 字数 682 浏览 5 评论 0原文

我想获得实际的 Mysql 查询执行时间,而它们在我的项目中运行,因此在之前和之后运行 PHP microtime() 并减去将不起作用。

当我们在命令行中运行查询时,结果会显示如下所示的计时信息:-

xxx rows affected in YY sec

如何使用 PHP 获取相同的时间信息。我在其他问题此处,以及此处 但没有得到类似的东西。是否没有像mysql_error()mysql_affected_rows()这样的PHP函数返回其他重要信息?如果不是的话为什么不存在?有什么道理吗?

有人说——

我认为这是获得执行的最佳方式 时间是使用一些程序执行 类似 exec() 或 system() 的函数。

有人有可以返回实际执行时间的 PHP 代码吗?

I want to get the actual Mysql query execution times while they run in my project so running PHP microtime() before and after and subtracting won't work.

When we run a query in command line, the result displays the timing information something like this:-

xxx rows affected in YY sec

How to get the same time information using PHP. I searched in PHP's Mysql functions in other SO question Here,and here but did not get anything similar. Is there no such PHP function like mysql_error(), mysql_affected_rows() which return other important information? If not why is it not there? Any reasoning?

Someone says -

I think that best way to get execution
time is to use some program execution
functions like exec() or system().

Does anybody have a working PHP code which returns the actual execution time?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小镇女孩 2024-10-05 22:03:03

试试这个:

<?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 内部分析器。

try this:

<?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');

?>

the first if statement gives you the overall execution time for your query like this:

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

the second if statement gives you the detaild execution times of your query.
The results should be exact since you are using the mysql internal profiler.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文