Pdo表前缀

时间:2014-01-12 01:53:13

标签: php pdo

当我构建一个非常大的Web应用程序时,我依赖Pdo Api,现在我需要能够为这些表添加前缀,例如prefix_tablename ......我应该如何处理这个?

  • 制作一个包装器(耗费时间,难以做到等)。
  • 添加str_replace 在每次查询之后,是的,这听起来很愚蠢......

    $ stmt = $ db-> prepare(“查询FROM:前缀:表格”)...

扩展PDO类并以某种方式破解它?

是否有任何我可能错过的神奇功能可以帮助我实现这一目标......?

2 个答案:

答案 0 :(得分:1)

这根本不是您想要的答案,但我建议您使用 DBAL 数据库抽象层)。在这种情况下,我会建议Doctrine。如果您使用它,那么您需要更改的是entities内的表名。你的代码将完全相同。

无论如何,祝你好运。除了更改数据库

之外,没有简单的答案

答案 1 :(得分:0)

您可以扩展PDO类并使用magica方法__call()检查被调用的prepare()方法,并在查询文本中替换:: prefix ::。应该是这样的:

class PrefixedPDO extends PDO {

   /**
    * @link http://www.php.net/manual/en/language.oop5.overloading.php#object.call
    */
   public function __call($name, $arguments)
   {
      // according to [this](http://php.net/manual/ru/pdo.prepare.php) - query should be in the args
      if ($name === 'prepare') {
          // check for the ::prefix:: in the query text (use params for that)
      }
   }

}

您还需要将PDO初始值更改为新类 - PrefixedPDO();

希望这有帮助。