【问题标题】:CodeIgniter: Unable to connect to your database server using the provided settings Error MessageCodeIgniter:无法使用提供的设置连接到您的数据库服务器错误消息
【发布时间】:2011-11-07 10:00:58
【问题描述】:

我一直在使用 MySQL 驱动程序很好地使用 CI。我想改用 MySQL 驱动程序,但是一旦我更改它(只需在 MySQL 末尾添加“i”,并添加端口号),我就会收到以下错误消息

发生数据库错误

无法使用提供的设置连接到您的数据库服务器。

文件名:core/Loader.php

行号:232

我的设置如下所示:

$db['default']['hostname'] = $hostname;
$db['default']['username'] = $username;
$db['default']['password'] = $password;
$db['default']['database'] = $database;
$db['default']['dbdriver'] = 'mysqli';
$db['default']['port']     = "3306";  
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE; 

where
$hostname = 'localhost';
$username = 'myusernamegoeshere';
$password = 'mypasswordgoeshere';
$database = 'mydatabasenamegoeshere'; 

我正在使用:

CI 2.0.2 php 5.3.4 Apache/2.2.17 (Unix) mysql 5.5.13 mysql.default_port 3306

我做错了什么吗?

谢谢,

【问题讨论】:

    标签: php mysql codeigniter connection mysqli


    【解决方案1】:

    我认为,PHP 配置有问题。
    首先,在 ./config/database.php 的末尾使用这个脚本调试你的数据库连接:

    ...
      ...
      ...
      echo '<pre>';
      print_r($db['default']);
      echo '</pre>';
    
      echo 'Connecting to database: ' .$db['default']['database'];
      $dbh=mysql_connect
      (
        $db['default']['hostname'],
        $db['default']['username'],
        $db['default']['password'])
        or die('Cannot connect to the database because: ' . mysql_error());
        mysql_select_db ($db['default']['database']);
    
        echo '<br />   Connected OK:'  ;
        die( 'file: ' .__FILE__ . ' Line: ' .__LINE__); 
    

    那就看看是什么问题。

    【讨论】:

    • 迄今为止最好的答案。我收到错误,然后当我用 $db['default']['hostname'] = ':/Applications/MAMP/tmp/mysql/mysql.sock'; 替换默认主机名时有效。感谢这里stackoverflow.com/questions/4219970/…
    • 这应该是公认的答案。你真的拯救了我的一天。我的问题很简单,以至于我看不到,密码输入错误!你的脚本帮助我看到了它。谢谢大佬!
    • 很好的答案。改编为mysqli,贴在下面。以防万一它可能对其他人有用。
    【解决方案2】:

    今天我在直播服务器中遇到了这种问题,我解决了改变这条线的问题

    $db['default']['db_debug'] = TRUE;
    

    $db['default']['db_debug'] = FALSE;
    

    【讨论】:

    • 这是我在实时环境中使用 postgresql DB 的问题。非常感谢,因为我不知道问题是什么,因为我是 PHP 新手。
    • 好的,有人能解释一下为什么会导致连接问题吗?我很沮丧,我花了大约一个小时试图弄清楚我的项目是如何在一夜之间崩溃的,这解决了它。我不知道为什么。
    • 我仍在试图找出问题所在,因为虽然页面站点现在又回来了,但数据库中的数据都已经消失了。数据在那里,我检查了但它没有显示在网站上。
    • 同样的事情发生在我身上,我使用的是 Mysql 数据库,现在更改为 SQL Server 后,这个问题发生在我的本地环境中,没有任何意义......
    • 这为我提供了 php 错误,以识别数据库尝试连接和查询的位置。有了这个,我的问题是通过在 wamp 中将我的 php 版本从 7.0 更改为 7.3 来解决的......虽然不知道为什么......
    【解决方案3】:

    对我来说,问题出在 php.ini 文件中。属性 mysql.default_socket 指向一个不存在的目录中的文件。该属性指向/var/mysql/mysql.sock,但在OSX中,该文件位于/tmp/mysql.sock

    一旦我更新了 php.ini 中的条目并重新启动了网络服务器,问题就解决了。

    【讨论】:

    • 这对我有用,除了值被颠倒了!我的 php.ini 指向 '/tmp' 但应该是 '/var/mysql/mysql.sock'...我也在 OSX 上(供参考)
    • 请注意这里有两个设置:mysql.default_socket pdo_mysql.default_socket
    • 是的!谢谢肯。我看到树的地方,没有时间检查什么。 pdo_mysql.default_socket=/tmp/mysql.sock mysql.default_socket =/tmp/mysql.sock mysqli.default_socket =/tmp/mysql.sock
    • 在我的情况下,php.ini 文件中的两个设置都是空白的,导致它使用 MySQL 默认值,我猜是 /var/mysql/mysql.sock 因为这个答案为我解决了它.另一种解决方案是设置从 /tmp/mysql.sock 到 /var/mysql/mysql.sock 的符号链接。
    【解决方案4】:

    我通过改变解决了这个问题

    $db['default']['pconnect'] = TRUE;$db['default']['pconnect'] = FALSE;

    /application/config/database.php

    【讨论】:

    • mee to :) and One UP VOTE for u.
    • 是的。这对我有用。 pconnect - TRUE/FALSE (boolean) - Whether to use a persistent connection.
    • 谢谢,这解决了我在 OSX El Capitan MAMP 上的问题
    【解决方案5】:

    $db['default']['db_debug'] 设置为 FALSE 而不是 TRUE。

    $db['default']['db_debug'] = FALSE;
    

    【讨论】:

    • 成功了!对此有何解释?
    • 为先前的错误工作,但现在抛出此错误 ** 遇到 PHP 错误 严重性:8192 消息:mysql_escape_string():此函数已弃用;改用 mysql_real_escape_string() 。文件名:mysqli/mysqli_driver.php 行号:319**
    【解决方案6】:

    (CI 3) 对我来说,有效的是改变:

    'hostname' => 'localhost' to 'hostname' => '127.0.0.1'
    

    【讨论】:

    • 对我来说,这也是解决方案。我将我的 ENV 变量“主机名”从“localhost”更改为“127.0.0.1”,它起作用了 :)
    【解决方案7】:

    扩展@Valeh Hajiyev 对mysqli 驱动程序测试的出色而明确的答案:

    在 ./config/database.php 末尾使用此脚本调试您的数据库连接:

    /* Your db config here */ 
    $db['default'] = array(
      // ...
      'dbdriver'     => 'mysqli',
      // ...
    );
    
    /* Connection test: */
    
    echo '<pre>';
    print_r($db['default']);
    echo '</pre>';
    
    echo 'Connecting to database: ' .$db['default']['database'];
    
    $mysqli_connection = new MySQLi($db['default']['hostname'],
                                    $db['default']['username'],
                                    $db['default']['password'], 
                                    $db['default']['database']);
    
    if ($mysqli_connection->connect_error) {
       echo "Not connected, error: " . $mysqli_connection->connect_error;
    }
    else {
       echo "Connected.";
    }
    die( 'file: ' .__FILE__ . ' Line: ' .__LINE__);
    

    【讨论】:

      【解决方案8】:

      如果这就是您所做的全部更改,那么您可能没有在 PHP 配置中安装或启用 mysqli 驱动程序。

      使用 phpinfo() 或在您的 php.ini 文件 (extension=php_mysqli....) 中检查它是否存在。

      【讨论】:

      • 谢谢你的回答。我相信从 php 5.3 开始默认启用 mysqli。但我确实检查了我的 php 信息,这就是我看到的 d.pr/FUZ6
      • 好的。在 config.php 中将日志级别更改为 4,并检查 app/logs/log-2011-08-31.php 文件是否有任何明显错误(在您刷新应用中的页面后) .查找其中包含 mysqli_connect() 的行。
      【解决方案9】:

      问题解决了!

      我首先在 XAMMP 中设置了我的所有网站,然后我不得不将其转移到 LAMP,在 SUSE 安装的 LAMP 中,我得到了这个错误。

      问题是database.php文件中的这些参数不应该被初始化。 只需将用户名和密码留空即可。 就是这样。

      (我的第一个也是蹩脚的猜测是因为旧版本的 mysql,因为内置安装随旧版本一起提供。

      【讨论】:

      • 非常感谢!将用户名和密码留空似乎解决了我的问题。
      【解决方案10】:

      $db['default']['dbdriver'] = 'mysql' 更改为$db['default']['dbdriver'] = 'mysqli'

      【讨论】:

        【解决方案11】:

        就我而言,存储是个问题。我的硬盘已经满了... 在硬件上腾出一些空间,您的网站就会正常工作

        【讨论】:

          【解决方案12】:

          在您的配置中,指定您的数据库所在的端口号。您可以在 phpMyAdmin 的左上角找到端口号。它看起来像这样

          const DB_HOST = 'localhost:3308';
          

          【讨论】:

            【解决方案13】:

            如果您使用它来保护您的服务器: http://www.thonky.com/how-to/prevent-base-64-decode-hack/

            然后得到错误:Code Igniter needs mysql_pconnect() in order to run.

            当我意识到服务器上的所有 Code Igniter 网站都已损坏时,我就明白了,所以这不是本地连接问题。

            【讨论】:

              【解决方案14】:

              我已经解决了这个问题。就我而言,我只是更改了配置。 “主机名”变成了“本地主机”

              $active_group = 'default';
              $active_record = TRUE;
              
              $db['default']['hostname'] = 'localhost';
              

              【讨论】:

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