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