我一直在阅读几篇文章以及有关如何在 CI 中连接多个数据库的官方指南。我目前使用标准 database.php 配置连接到默认应用程序数据库,并在需要时动态加载其他数据库。这部分应用程序的主要目的是具有“导入”功能,用户用户可以在请求时即时输入外部数据库连接数据。
只要正确设置了第二个数据库连接数据,该应用程序就可以轻而易举地工作。当连接配置中出现错误时,我没有找到一种工作方法来评估无法建立与其他数据库的连接。
我发现我可以检查 $db->conn_id 是否为 false 以最终向用户返回错误,但由于某些原因,无论如何它都会返回一个对象。
这是我在模型中所做的一个简短示例:
function plugin_subscribers_import_sfguard($channel_id)
{
// Get the channel object by its ID
$channel = $this->get_channel_by('id',$channel_id);
// Set the preferences for the second database
// from the channel informations we retrieved
$db['hostname'] = $channel->host;
$db['username'] = $channel->user;
$db['password'] = $channel->password;
$db['database'] = $channel->db;
$db['dbdriver'] = "mysql";
$db['pconnect'] = FALSE;
$db['db_debug'] = TRUE;
// Open the connection to the 2nd database
$other_db = $this->load->database($db,TRUE);
if ( ! $other_db->conn_id )
{
// This never gets executed as $other_db->conn_id always
// returns: "resource(34) of type (mysql link)"
return false;
}
else
{
// Execute the rest of the import script
$other_db->select('*');
$other_db->from('sf_guard_user');
$other_db->join('sf_guard_user_profile',
'sf_guard_user_profile.id=sf_guard_user.id',
'inner');
$query = $other_db->get();
}
}
我想知道是否有一些我没有从整个事情中得到的东西,或者我是否使用错误的逻辑来评估辅助数据库是否打开了正确的连接。
我还尝试尝试/捕获连接问题,但没有成功。
提前感谢您提供的所有支持。费德里科