我正在尝试使用Idiorm概括一个PHP脚本。 这个想法是:用户登陆身份验证页面。凭证存储在第一个数据库中,称为“db_users'”。 对于存储在' db_users'中的每个用户,我有以下字段:login / password / 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();
}
}
答案 0 :(得分:1)
您应该查看文档的“多个连接”部分,它详细说明了如何通过命名来实现多个连接。
答案 1 :(得分: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();
}
}