【问题标题】:What is the best way to use PDO prepared statements?使用 PDO 准备语句的最佳方法是什么?
【发布时间】:2010-12-09 00:16:00
【问题描述】:

在 PDO 中使用准备好的语句时,我应该为每个 db 调用“构建”一个准备好的语句,还是可以为所有调用使用一个语句? 示例:

 class DB{
    ...
    function query($sqlStatementString,$data){
        $this->sth->prepare($sqlStatementString);
        $this->sth->execute($data);
    }
    ...
}

class User{
    ...
    function doSomething(){
        $sthForDoSomething->prepare(...);
        $sthForDoSomething->execute(...);
    }
    ...
    function jump(){
        $sthForJump->prepare(...);
        $sthForJump->execute(...);
    }
}

使用其中一种方法对内存/速度有影响吗? 谢谢!

【问题讨论】:

  • 要将您的代码显示为代码块,您需要将它们缩进四个空格(突出显示它们并按 Ctrl+K)。

标签: php pdo prepared-statement


【解决方案1】:

如果您要多次发出同一个查询,并且只将不同的参数绑定到占位符,您应该尝试以一种可以重用语句的方式来构建您的代码。调用 prepare 会导致数据库为查询创建并缓存一个执行计划,您将在以后的调用中重复使用该执行计划来执行,从而使这些查询更快。

【讨论】:

  • 所以我想从 DB 类中的通用查询方法进行调用是不可能的。我应该在每个模型中定义每个准备好的语句。现在出现了第二个问题:在模型上定义这些会在该模型的每个实例中重新声明它们吗?如果是这样,最好在数据库和模型之间建立一个中间层来每次只定义这些语句一次?谢谢丹!
  • 当你应该把时间花在你的应用程序上而不是构建另一个数据库抽象层时,你可能在这方面做得太过火了。重用执行计划的好处通常很小——当你知道它很重要或很容易时就去做。让您的模型方法重用语句很容易;如果一个方法要遍历一堆东西并使用不同的数据对每个东西执行相同的查询,那么这是对准备好的语句的良好重用。让模型类的许多实例重用准备好的语句很困难,而且可能不值得花时间。
猜你喜欢
  • 1970-01-01
  • 2010-11-18
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 2023-03-19
  • 2013-11-03
相关资源
最近更新 更多