Zend framework 如何检查从Zend Framework到DB的每个查询

Zend framework 如何检查从Zend Framework到DB的每个查询,zend-framework,zend-db,zend-db-select,zend-db-profiler,Zend Framework,Zend Db,Zend Db Select,Zend Db Profiler,我有一个复杂的报告应用程序,允许客户端登录并查看其客户端数据的报告。应用程序中有几个部分使用不同的控制器进行数据库调用。我需要确保客户端A不会通过头操作获取客户端B的信息 系统进行身份验证,并为其分配clientID和roleID。如果您的roleID>1,则表示您为托管数据的公司工作,并且可以查看所有客户信息。我想创建一个一应俱全的,基本上是这样工作的: if($roleID > 1) { ...send query to database }else {

我有一个复杂的报告应用程序,允许客户端登录并查看其客户端数据的报告。应用程序中有几个部分使用不同的控制器进行数据库调用。我需要确保客户端A不会通过头操作获取客户端B的信息

系统进行身份验证,并为其分配clientID和roleID。如果您的roleID>1,则表示您为托管数据的公司工作,并且可以查看所有客户信息。我想创建一个一应俱全的,基本上是这样工作的:

    if($roleID > 1) {

    ...send query to database

   }else {
     if(...does this query select a record with clientID other than my $auth->clientID){
     do not execute query
  }else {
   execute query
   }
}
问题是,我希望对服务器上的每个查询都运行此命令。。。如何将此代码作为应用程序和数据库之间的“路障”?我已经使用Zend_Profiler来查看查询,所以我知道这在某种程度上是可能的,但无法从探查器代码中看出这一点


我总是可以编写一个身份验证函数,并以这种方式传递所选的查询,但这种“一网打尽”的方法将更容易在所有调用中实现,并且是未来的证明。感谢您的帮助

根据您的数据库服务器,您可以在数据库端放置跟踪

以下是Oracle的一个示例:


这是应用程序设计的错误。
您应该使用“服务架构”-查询的唯一入口点是
服务
。如果这是您希望在每个查询上运行的内容,我建议扩展
Zend\u Db\u Select
并覆盖
query()
assemble()
函数以添加到您的逻辑中。您还需要为它添加一种方法,使其能够感知您的
$auth
对象。

另一个选项是扩展数据库适配器,以便您可以直接拦截查询。在我看来,您应该尝试在应用程序级别这样做。

我倾向于使用ZFdebug工具栏,它非常有用[数据库:SQL查询的完整列表和每个查询的时间]我不确定我是否理解。。。我以为Zend框架是一个伪服务?