0

我正在尝试使用 Idiorm 概括一个 php 脚本。这个想法是:用户登陆身份验证页面。凭证存储在第一个数据库中,称为“db_users”。对于存储在“db_users”中的每个用户,我有以下字段:登录名/密码/authorized_db。一旦用户被识别,我想将 Idiorm 请求的数据库集切换到与其权限相对应的新数据库。

例子:

config.php 
$db_host        = 'localhost';
$db_user       = 'user1';
$db_password    = 'user1';
$db_name        = 'db_users';

Idiorm 最初是这样配置的:

ORM::configure("mysql:host=$db_host;dbname=$db_name");
ORM::configure('username', $db_user);
ORM::configure('password', $db_password);
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
ORM::configure('return_result_sets', true);

最后,在 login.php 页面上,我尝试了类似的操作,但 ORM 信息没有更新,打开的数据库一直是第一个,db_users,而不是为该用户授权的数据库:

if($username != '' AND $password != ''){
  $d = ORM::for_table('users')->where('username',$username)->find_one();
   if($d){
       $the_new_db = $d['authorized_db'];
       ORM::configure("mysql:host=$db_host;dbname=$the_new_db");
       do_something_in_the_new_db();
   }
}
4

2 回答 2

1

您应该查看文档的 Multiple Connections 部分,它详细说明了如何通过命名来实现多个连接。

https://idiorm.readthedocs.io/en/latest/connections.html

于 2017-03-23T08:21:10.783 回答
0

你需要2个配置:

1)

ORM::configure("mysql:host=$db_host;dbname=$db_name", null, 'firstDb');
ORM::configure('username', $db_user);
ORM::configure('password', $db_password);
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
ORM::configure('return_result_sets', true);

2)

ORM::configure("mysql:host=$db_host;dbname=$db_name2", null, 'secondDb');
ORM::configure('username', $db_user);
ORM::configure('password', $db_password);
ORM::configure('driver_options', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
ORM::configure('return_result_sets', true);

进行查询:

if($username != '' AND $password != ''){
  $d = ORM::for_table('users', 'firstDb')->where('username',$username)->find_one();
   if($d){
       $d = ORM::for_table('whichever_table', 'secondDb')->where('user_id', 1)->find_one();
   }
}
于 2017-08-10T11:08:22.357 回答