你好我们想出一个管理仪表板,但我需要我的系统根据登录的用户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';
}
答案 0 :(得分:2)
当您创建从PHP脚本到(MySQL)数据库的连接时,您指定(除其他外)数据库名称。您的脚本与数据库服务器建立连接,连接与您指定的数据库建立连接。
$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;
查询,但是如何?
假设您可以访问一台服务器上的两个数据库:
最初,您使用mysqli_connect
连接到数据库db1
(因此您必须先连接):
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "db1");
然后,您要切换到数据库db2
。
使用mysqli_query从PHP发送简单的SQL命令,与执行SELECT
,UPDATE
,INSERT
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);
我希望这会有所帮助!!!