当我构建一个非常大的Web应用程序时,我依赖Pdo Api,现在我需要能够为这些表添加前缀,例如prefix_tablename ......我应该如何处理这个?
添加str_replace 在每次查询之后,是的,这听起来很愚蠢......
$ stmt = $ db-> prepare(“查询FROM:前缀:表格”)...
等
扩展PDO类并以某种方式破解它?
是否有任何我可能错过的神奇功能可以帮助我实现这一目标......?
答案 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()
;
希望这有帮助。