如何在单个会话期间更改数据库

时间:2013-12-18 23:43:51

标签: php mysql

我需要实现用户可以动态更改数据库的功能。一旦更改,当前数据库将用于进行db调用的所有php文件。

所以,我试图在单个会话期间找到切换并记住当前数据库参数的最佳解决方案。这就是我现在正在做的事情:

1)php连接文件 conn1.php,conn2.php,conn3.php 等包含不同的数据库连接参数(名称,密码等 - $ hostname ,< strong> $ username 等等。)

2)当用户更改数据库时,当前数据库代码将保存为会话变量$ currDB。

3)所有包含db调用的文件,顶部都有一个数据库连接开关:

switch ($currDB){
     case 1:
          require_once('conn1.php');
          break;
     case 2:
          require_once('conn2.php');
          break;
    ........
}
$mysqli = new mysqli($hostname,$username,$password,$database);

是否有更优雅的方法来实现基于用户选择切换数据库的相同功能?我不确定在多个文件中维护会话变量是否是最佳选择。

有更好的想法吗?

由于

2 个答案:

答案 0 :(得分:1)

我建议你做一些像

这样的事情
  • 从会话或用户输入中获取$ currentDB
  • 通过(int)或者例如,将其清理为int。对于非常旧的PHP版本,is_numeric()后跟abs(round(..))

现在只需@require_once("conn$currentDB.php");并检查错误。

最后一步是将其放入conn.php并将其包含在所有消费者中。

答案 1 :(得分:0)

我倾向于将所有连接细节放入单个数组中,包括单个文件或其他类型的配置。同样,您也可以将它们命名为“live”,“dev”,“live-1”或任何您喜欢的名称。

$dbDetails = array(
    1 => array('hostname' => 'localhost',
               'username' => 'blah',
               # ... etc ... ),
    2 => array('hostname' => 'localhost',
               'username' => 'blah',
               # ... password & database ... ),
);
if (!isset($currDB, $dbDetails[$currDB])) {
    die('unknown DB connection ID');
}
$db = $dbDetails[$currDB];
$mysqli = new mysqli($db['hostname'], $db['username'], $db['password'], $db['database']);