如何在两个数据库之间动态切换

时间:2018-04-04 18:49:36

标签: php mysql

你好我们想出一个管理仪表板,但我需要我的系统根据登录的用户ID动态切换数据库,每个用户必须上传一个与他们的登录ID相关联的数据库,一旦登录系统应该能够切换到上传的数据库

这是到目前为止的代码

              $hostname='localhost';
              $username='root';
              $password='';
              $database='karonlabs_applications';

              /*DEFAULT DATABASE with a table that contains user id */
              $db=new mysqli($hostname,$username, $password,$database);

                 if ($db) { 


           echo 'Connected';


           }else{
               echo 'Cannot connect';
           }

          /* So here my client can be give a database .sql file which he has to upload after signing into the dashboard with credentials from the first database, so what i want is after my client uploading there database forexample like pos_system.sql the system should automatically switch to that uploaded database for the client ,NB: each client has to upload there own database and should access it basing on their login id*/

           if(mysqli_query($db, "USE `pos_system`")){
               echo 'connected to POS DB';
           }else{
               echo 'Cannot connect';
           }

3 个答案:

答案 0 :(得分:2)

连接如何工作

当您创建从PHP脚本到(MySQL)数据库的连接时,您指定(除其他外)数据库名称。您的脚本与数据库服务器建立连接,连接与您指定的数据库建立连接。

例如mysqli_connect

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");

或面向对象的版本:

$mysqli = new mysqli("127.0.0.1", "my_user", "my_password", "my_db");

请注意最后一个 my_db 参数。

从现在开始,您在名为 my_db 的数据库上已连接且正常工作。 之后,当您使用指定凭据连接时,您发送到数据库的每个查询都在连接数据库上执行

如何切换数据库

最佳做法是执行USE dbname;查询,但是如何?

假设您可以访问一台服务器上的两个数据库:

  • db1(您的数据库)
  • db2(客户端数据库)

最初,您使用mysqli_connect连接到数据库db1(因此您必须先连接):

$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "db1");

然后,您要切换到数据库db2。 使用mysqli_query从PHP发送简单的SQL命令,与执行SELECTUPDATEINSERT s ...和其他命令时完全相同。

已连接到db1

mysqli_query($link, "USE `db2`");

$link是您的第一步创建的连接。如果您使用的是面向对象的版本,那么它将是:

$mysqli->query("USE `db2`");

现在,您已连接到db2,并且db2数据库上的每个查询 AFTER USE db2;都已执行。

但是,请注意,如果您关闭连接并再次连接到db1,使用第一步的代码,您必须再次使用USE db2; 。 因此 USE 很有帮助,但有时最好关闭与db1的关联并直接连接到db2。 取决于您在执行脚本时及时更改数据库的频率。

答案 1 :(得分:1)

如果您使用PDO进行连接,可以尝试:

// Connect to the first database
$pdo = new PDO("mysql:host=HOST_NAME;dbname=DATABASE1", USER_NAME, PASSWORD, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"]);


// Change to next database
$pdo->exec("use DATABASE2");

您最初可以在不指定数据库的情况下准备连接,只需从连接字符串中删除此;dbname=DATABASE1,然后使用$pdo->exec("use DATABASE_NAME");

对于MySQLi,您可以使用它来切换数据库:

$conn->query("use DATABASE2");

答案 2 :(得分:0)

所以你可以这样做:

在验证用户名和passowrd的php文件中,请执行以下操作:

getUsersDB ($user, $password) {
   $db = new mysqli("dbServer", "admin_user", "admin_password", "users");

   if ($db->connect_errno) { /* handle the error */ }

    $user = $mysqli->query("SELECT userName FROM users");
    if ($user === FALSE) { /* handle the error */ }
    else { /* verify users passowrd */ }

    $userDB = $db->query("SELECT database FROM users WHERE user = $user") === TRUE);
    if ($userDB === TRUE) {
        $db->close();
        return $userDB;
    }
}

在用户访问其数据库的文件中,您执行以下操作:

/* have login scirpt */
$userDB = getUserDB ($user, $password);
$db = new mysqli("dbServer", $user, $userPassword, $userDB);

我希望这会有所帮助!!!