我试图实现的结果涉及拥有一个数据库的应用程序,其中包含存储有关系统上用户的数据的最少表,该数据库将用于在用户登录应用程序时验证用户的登录详细信息。我希望能够做的是在用户登录后根据存储在主数据库中的有关该用户的详细信息动态连接到另一个数据库。
基本上我希望系统上的每个用户都有自己的数据库,一旦他们登录就连接到该数据库,并且能够使用公共(public)数据库模型类(因为每个用户的数据库将与其他用户的数据库具有相同的表)。
这可能吗?如果是这样,我将如何实现动态数据库连接(假设在验证其登录详细信息的操作中)。
任何帮助将不胜感激。
最佳答案
最简单的答案不是建立第二个连接,而是在确定给定用户需要的名称后更改默认架构。
例如,获取给定用户的辅助数据库的名称:
$db = Zend_Db::factory(...options...);
$secondary_db = $db->query("SELECT secondary_db
FROM user_data WHERE user = ?", $userid)
->fetchOne();
然后运行查询以更改架构。请注意
USE
语句不支持作为准备好的语句,因此您必须使用驱动程序 API 执行它:$db->getConnection()->query("use $secondary_db");
现在,如果您引用一个表而不限定其架构,您将在辅助数据库中获得表实例。这包括您通过 Zend_Db 适配器或 Table 类等运行的任何查询。
但是
USE
语句仅在您的辅助数据库与包含用户详细信息的主数据库驻留在同一数据库实例上时才有效。而且这还假设您不需要针对数据库重新验证用户,因为每个用户都有不同的数据库级凭据。关于php - Zend 的动态数据库连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3911795/