最近在codeigniter中使用dsn进行数据库连接,但是不管端口号改成什么总是能够连接成功,而修改用户名,密码或ip地址的话就会出现连接失败的问题,下面是我的代码
function get_remote_dblist($ip, $port, $user, $pwd) {
$dsn = "mysql://$user:$pwd@$ip:$port";
$newDB = $this->load->database ( $dsn , TRUE );
return $newDB->version();
}
烦请各位前辈指点下

解决方案 »

  1.   

    CI的官方文档中并未提及DSN中主机名可以附加端口号。有一个折衷的方法你可以试试
    $dsn = "mysql://{$user}:{$pwd}@{$ip}/?port={$port}";
      

  2.   

    刚刚翻看了CI的源码,在 system/database/DB.php 的DB()函数中,有以下代码:
    if (($dns = @parse_url($params)) === FALSE)
    {
    show_error('Invalid DB Connection String');
    } $params = array(
    'dbdriver' => $dns['scheme'],
    'hostname' => (isset($dns['host'])) ? rawurldecode($dns['host']) : '',
    'username' => (isset($dns['user'])) ? rawurldecode($dns['user']) : '',
    'password' => (isset($dns['pass'])) ? rawurldecode($dns['pass']) : '',
    //你可以添加这一行代码,来用你刚才的方法设置端口号
                                                            'port'          =>
    (isset($dns['port'])) ? rawurldecode($dns['port']) : '', 'database' => (isset($dns['path'])) ? rawurldecode(substr($dns['path'], 1)) : ''
    );
      

  3.   

    打开system/database/DB.php在第77行自己对$params这个array进行扩展就好了
      

  4.   

    1楼的方法可行,也感谢sibang的帮忙
    顺便问一下在codeigniter中如何判断是否有连接数据库成功呢,在不知道数据库表的情况下,我上面的那个代码可行吗?除了mysql_connect外还有其他的吗