【问题标题】:CODEIGNITER 1.7.2: unable to connect to db based on provided settingsCODEIGNITER 1.7.2:无法根据提供的设置连接到数据库
【发布时间】:2018-06-18 23:18:10
【问题描述】:

这是我的数据库配置文件:

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost:8080',
    'username' => 'root',
    'password' => '',
    'database' => 'some_db',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => TRUE,
    'db_debug' => FALSE,
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

我的确切错误信息是这样的:

A Database Error Occurred

Unable to connect to your database server using the provided settings.

【问题讨论】:

  • 尝试将 'localhost' 更改为 '127.0.0.1'。您有可以连接的 SQL 客户端吗?这是在您的开发机器上运行还是在远程系统上运行?
  • 可能升级到最新版本
  • @wolfgang1983 到目前为止,这不是一个选项。
  • 尝试不使用端口,例如'hostname' => 'localhost', mysql 的典型端口是3606,但您不需要hostname 中的端口。

标签: php codeigniter mysqli xampp localhost


【解决方案1】:

在 CI 1.7 中,您需要为 mysqli 使用“端口”配置。

$db['default']['port'] = "3306";
$db['default']['hostname'] = "localhost";

默认的DB_driver.php 设置是$port = ''(在第 43 行附近)。

对于mysqli_driver.php,db_connect() 函数使用此空端口并引发错误。

您会在下面看到驱动程序方法的区别,(文件分别位于 system/database/drivers/mysql 或 system/database/drivers/mysqli)

mysql_driver.php:

function db_connect()
{
    if ($this->port != '')
    {
        $this->hostname .= ':'.$this->port;
    }

    return @mysql_connect($this->hostname, $this->username, $this->password, TRUE);
}

与 mysqli_driver.php:

function db_connect()
{
    if ($this->port != '')
    {
        return @mysqli_connect($this->hostname, $this->username, $this->password, $this->database, $this->port);
    }
    else
    {
        return @mysqli_connect($this->hostname, $this->username, $this->password, $this->database);
    }

}

来源:https://forum.codeigniter.com/archive/index.php?thread-12577.html

【讨论】:

    【解决方案2】:
    $db_obj=$CI->load->database($config, TRUE);
    if($db_obj->conn_id) {
        //do something
    } else {
        echo 'Unable to connect with database with given db details.';
    }
            or
    
    
    You can check for the conn_id on the $db_obj
    
    if ($db_obj->conn_id === false) {
        $config['db_debug'] = true;
        $config['hostname'] = "myMasterDatabase.com";
        $db_obj=$CI->load->database($config, TRUE);
    }
    This should work.
    

    【讨论】:

      猜你喜欢
      • 2014-04-27
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 2020-01-11
      • 2012-03-21
      • 1970-01-01
      • 2016-02-02
      相关资源
      最近更新 更多