【问题标题】:Run a query each time a database connection is opended Zend FM每次打开数据库连接时运行查询 Zend FM
【发布时间】:2016-12-18 06:19:06
【问题描述】:

是否可以在每次打开与数据库的新连接时执行查询。此查询需要在打开数据库连接后立即运行,因为此查询调用存储过程,该存储过程使用请求运行查询的用户的详细信息对表设置各种访问控制。我试图在各个地方调用这个存储过程,它们都成功了,但我想要一些反馈。

我已将此查询放在其他映射器扩展的抽象映射器类中。每次实例化新的映射器时都会调用存储过程。

另一个调用存储过程的地方是在调用其他映射器方法之前。这样做的缺点是会有很多重复的代码(调用存储过程的代码)。

这个调用的最后一个地方是Bootstrap.php。此文件中的每个 _init 方法假定每次加载应用程序时只运行一次。我决定将此调用放在我们的一个模块的 Bootstrap.php 之一中的存储过程中。这是迄今为止我能想到的最好的地方,因为我只需要编写一次调用存储过程的代码,并且每次访问应用程序时都会运行初始化方法。这样做的缺点是我不知道将东西放入 Bootstrap.php 的副作用。

所有这些地方的主要缺点之一是存储过程被多次调用。为了使访问控制起作用,存储过程只需要在每个数据库会话中调用一次。这不会因为不必要的调用而导致速度以外的任何问题。

有没有更好的地方可以把这个调用放到存储过程中? Zend FM 是否在某处实现了此功能?如果我把它放在 Bootstrap 文件中,有什么需要考虑的吗?

感谢您阅读本文并提供任何帮助。

  • DB2 版本 10.5
  • Linux 平台
  • Zend FM 版本 2

【问题讨论】:

  • 请指定 DB2 版本和平台。

标签: php zend-framework2 db2 db2-luw


【解决方案1】:

作为替代方案,您可以通过将database configuration parameter connect_proc 设置为存储过程的名称来在数据库端进行配置。请注意,随后将为所有远程和本地连接调用该过程,包括由数据库管理员建立的连接。

如果您需要将额外信息从客户端传递到connect_proc 例程,您可以使用client accounting string connection parameter,然后您可以使用MON_GET_CONNECTION() function 在过程中读取:

SET acct_string = (
  SELECT client_acctng FROM TABLE (
    MON_GET_CONNECTION(MON_GET_APPLICATION_HANDLE(),-1)
  )
)

【讨论】:

  • 文档说只有参数为0的程序才能用作连接程序。这是行不通的,因为我们为我们的程序提供了两个东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-31
  • 2018-09-21
  • 1970-01-01
  • 2013-10-03
  • 2010-10-11
相关资源
最近更新 更多