Php Pdo表前缀

Php Pdo表前缀,php,pdo,Php,Pdo,当我构建我的web应用程序时,我依赖于PDOAPI,结果证明这是一个相当大的应用程序,现在我需要能够为表添加前缀,例如prefix_tablename。。。我应该如何处理这个问题 制作包装纸(耗时、难做等) 添加一个str_替换 每次询问之后,是的,听起来很愚蠢 $stmt=$db->prepare(“查询来源:前缀:表”) 等等 扩展PDO类并在那里进行黑客攻击 是否有任何我可能错过的神奇功能可以帮助我实现这一点…?这根本不是您想要的答案,但我建议您使用DBAL(数据库抽象层)。在这种情况

当我构建我的web应用程序时,我依赖于PDOAPI,结果证明这是一个相当大的应用程序,现在我需要能够为表添加前缀,例如prefix_tablename。。。我应该如何处理这个问题

  • 制作包装纸(耗时、难做等)
  • 添加一个str_替换 每次询问之后,是的,听起来很愚蠢

    $stmt=$db->prepare(“查询来源:前缀:表”)

等等

扩展PDO类并在那里进行黑客攻击


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

这根本不是您想要的答案,但我建议您使用DBAL(数据库抽象层)。在这种情况下,我会推荐。如果使用它,则只需更改
实体
中的表名即可。您的代码将完全相同


不管怎样,祝你好运。除了不更改数据库之外,没有简单的答案

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

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 init更改为新类-
PrefixedPDO()


希望这能有所帮助。

选项3:重新考虑数据库设计(即,您真的需要为表添加前缀吗?)为什么需要为表添加前缀?只有在找不到方法时才调用
\u call
。在您的示例中,自定义类扩展了PDO,因此当有人访问
prepare
方法时,永远不会调用magic
\u调用。