如何在 MVC 框架中分析 SQL 查询?

Posted

技术标签:

【中文标题】如何在 MVC 框架中分析 SQL 查询?【英文标题】:How to profile SQL queries in MVC framework? 【发布时间】:2009-12-08 12:11:33 【问题描述】:

我一直在开发自己的 php MVC 框架。我只是想了解您对如何分析在我的框架上运行的所有查询的想法。我已经完成了其他分析工作,但我不清楚如何分析 sql 查询,以便用户查看他们是否打开分析。

谢谢

【问题讨论】:

这取决于您想要什么信息。如果您只需要查询的数量,请在代码中使用相同的实例并在内部存储该数量。 这和 MVC 有什么关系? 【参考方案1】:

这真的取决于你想要多少信息,但为了对你来说有点通用,我会考虑这个(类是你用来与数据库交互的任何东西):

<?php
//Your Database access class
class DB
    //Create private property for holding profiling data
    private $sqlDataProfile = array();

    function query($sql)
        $starttime = time();//Get the time before the query

        //Query and whatnot here

        //Start profiling here:
        $this->addSqlProfile($sql,$starttime);
    

    //Get total number of queries run
    function getNumberOfQueries()
        return count($this->sqlDataProfile);
    

    private function addSqlProfile($sql,$starttime)
        //Create temporary array
        $tempArr = array(
          'sql'         => $sql,
          'time'        => time()-$starttime
        );

        //Push tempArr to the sqlDataProfile var
        $this->sqlDataProfile[] = $tempArr;
    


$db = new DB;
$db->query('SELECT * FROM table');
echo $db->getNumberOfQueries();
?>

这显然是一个非常简单的示例,但这种方式既非常简单,而且在您可以存储的东西方面也非常强大。例如,您还可以存储受查询影响的行数、查询涉及的表数等。

【讨论】:

【参考方案2】:

Zend Framework 是一个很好的例子。您可以在网站下看到 SQL 查询。如果您编写自己的框架,则可以遵循这种方式。用户可以打开或关闭一个布尔变量。如果他们将其设置为“true”,您可以在网页下编写 sql 查询。使用该解决方案,编码人员可以查看 mysql 正在运行哪些查询。

【讨论】:

【参考方案3】:

Nusphere PhpED v10 带有 PHP SQL 分析器,它适用于所有 php 框架和根本没有任何框架的项目。 http://www.nusphere.com/products/php_sql_profiler.htm

【讨论】:

以上是关于如何在 MVC 框架中分析 SQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC中分析淘宝网页发生乱码标题搞定方法

如何在 Ruby 中分析 `require` 语句?

如何在 PhantomJS 中分析 javascript

如何在生产环境中分析请求?

如何在 Ruby on Rails 中分析请求?

如何在 Android Studio 中分析测试?