【问题标题】:stored procedures vs PDO php pl/pgsql存储过程与 PDO php pl/pgsql
【发布时间】:2013-05-29 18:50:49
【问题描述】:

我的 PHP 类中有这个查询:

    $this->query = "SELECT a.x, b.y, c.z FROM aaa a INNER JOIN bbb b ON b.ida = a.ida ";
    $this->query.= "INNER JOIN ccc c ON c.idb = b.idb WHERE a.ida = :ida";
    $this->stmtparam = array(':ida' => $this->ida);
    return parent::fillArray(); // it fills a PDO FETCH_ASSOC array and returns it as JSON

假设这是一个复杂 10 倍的查询,而我在公司信息系统中有很多这样的查询;

我的问题是:是否可以在 postqresql 中创建一个存储函数,它执行相同的操作并返回许多表的 SET,然后将结果获取到 php 中的关联数组中?

这样做值得吗?

【问题讨论】:

  • 这取决于所有这一切实际上应该做什么,但我会说,如果这是执行任何类型的逻辑,通常建议将此逻辑排除在数据存储层之外,并在应用程序代码中。
  • 所以,假设我要返回 t_employee 名称、t_city ID、t_emp_salary 工资、t_department 名称、t_department_manager 名称 WHERE 员工在 2013-01-01 工作的地方,你会说这个是“逻辑”案例,还是放在应用层比较好?
  • @Pudge601 取决于它的逻辑,最好将其保留在实际查询中,例如,如果您存储二进制但想要检索十六进制值。
  • @GriffLab,是的,这是您希望在查询中保留该逻辑的一个很好的例子;也许我应该将“逻辑”改写为“业务逻辑”或“应用程序逻辑”
  • 谢谢,这很有帮助。

标签: php postgresql stored-procedures pdo


【解决方案1】:

postgresql 没有存储过程,但你可以编写一个本质上相同的函数。我更喜欢将复杂的查询放入一个函数中。这样您就可以在数据库端进行修复和性能改进,而不必每次都推出新的 PHP 代码。

这里有一个资源演示了如何创建一个 pg 函数并从 PHP 中调用它: http://pgedit.com/resource/php/pgfuncall

【讨论】:

  • 如果只是为了“包装”复杂的查询,我更喜欢视图而不是函数。
  • 不错,如果只是一个查询,可以包装成一个视图方便访问。但是,如果它具有复杂的数据处理逻辑,您需要执行循环或计算或将内容收集到临时表中,那么函数将是首选。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
相关资源
最近更新 更多