【问题标题】:Codeigniter error when trying to connect to database using mysqli尝试使用 mysqli 连接到数据库时出现 Codeigniter 错误
【发布时间】:2016-06-21 13:08:03
【问题描述】:

我在服务器上运行的 CodeIgniter 应用程序中出现以下错误。

这是错误的输出:

遇到了 PHP 错误

严重性:警告

消息:mysqli::real_connect(): (HY000/1044): Access denied for user 'xxx'@'localhost' 到数据库 'xxx'

文件名:mysqli/mysqli_driver.php

行号:161

回溯:

文件:/home/arya123/public_html/application/controllers/Home.php 行: 7 函数:__构造

文件:/home/arya123/public_html/index.php 行:292 功能: 需要一次

【问题讨论】:

  • 在数据库文件中你使用哪个扩展名? $config['dbdriver'] = "mysqli";
  • 似乎您没有接近该数据库的权限。是外部数据库还是localhost(服务器的)?
  • 你检查过application/config/database.php的设置是否正确吗?
  • 如果你使用共享主机su作为godaddy,我建议你检查你创建的用户,因为我有同样的问题,但这是mysql中用户权限的问题

标签: php codeigniter mysqli


【解决方案1】:

你必须在database.php中设置mysql端口号,默认为3306check this

使用任一

'dbport' => '3306',

 'hostname' => 'mysql.hostingprovider.com:3306',   

【讨论】:

    【解决方案2】:

    用端口连接本地主机为我解决了这个问题。

    $db['default'] = array(
        'dsn' => '',
        'hostname' => 'localhost:3308', //Added port here
        'username' => 'root',
        'password' => '1234',
        'database' => 'my_database',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );
    

    【讨论】:

      【解决方案3】:

      当我将我的 codeigniter 项目从 localhost 上传到 Live 服务器时,我遇到了同样的错误。

      我找到的解决方案是对应用程序进行一些更改 => config => database.php

      以下是数据库设置

      本地主机

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

      以下数据库设置

      实时服务器(只是演示,设置因托管服务提供商而异)

      1) 首先你必须创建数据库。

      2) 在仪表板上找到 MySql 数据库(或任何相关数据库),

      3) 创建新数据库并输入数据库名称、用户名、密码。

      4) 从本地主机导出数据库

      5) 在实时服务器上打开 phpmyadmin 并导入。

      6) 使用 FTP 客户端或仪表板更改 application=>config=>database.php 的设置。

      $db['default'] = array(
          'dsn'   => '',
          'hostname' => 'mysql.hostingprovider.com',    
          'username' => 'abc.username',
          'password' => 'abc.password',
          'database' => 'abc.databasename',
          'dbdriver' => 'mysqli',
          'dbprefix' => '',
          'pconnect' => FALSE,
          'db_debug' => (ENVIRONMENT !== 'production'),
          'cache_on' => FALSE,
          'cachedir' => '',
          'char_set' => 'utf8',
          'dbcollat' => 'utf8_general_ci',
          'swap_pre' => '',
          'encrypt' => FALSE,
          'compress' => FALSE,
          'stricton' => FALSE,
          'failover' => array(),
          'save_queries' => TRUE
      );
      

      【讨论】:

      • 您是否发现执行此步骤有任何困难?或者你错过了什么?您是否更改了主机名、用户名、密码、数据库名?请重新检查!
      • 是的,你提到的一切
      【解决方案4】:

      执行以下操作:

      1. applications/config/database.php 中,将dbport => '3306', 添加到默认数组$db['default'] = array();
      2. system/database/DB_driver.php 中,将public $port = ''; 更改为public $port = '3306';

      【讨论】:

        【解决方案5】:

        尽量使用不带特殊字符的普通密码,示例如下:

        $db['default'] = array(
            'dsn'   => '',
            'hostname' => 'localhost',
            'username' => 'password',
            'password' => 'Mynewpass@756',
            'database' => 'database_name',
        );
        

        【讨论】:

          【解决方案6】:

          你可以添加新用户并通过并赋予它所有权限,如下所示:

          CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
          GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
          FLUSH PRIVILEGES;
          

          那么,你应该用新用户和密码更新你的 config.php 文件。

          【讨论】:

            【解决方案7】:

            您可以编辑服务器的 php.ini 文件来定义 CodeIgniter 默认使用的端口。

            C:\wamp64\bin\apache\apache2.4.41\bin\php.ini

            mysqli_connect() 的默认端口号。

            mysqli.default_port = 3308

            【讨论】:

              【解决方案8】:

              尝试在没有任何密码的情况下将 config/database.php 'username' => 'xxx' 设置为 'username' => 'root'。

              $db['default'] = array( 
              'dsn' => '',
              'hostname' => 'localhost',
              'username' => 'root',
              'password' => '',
              

              【讨论】:

                【解决方案9】:

                验证用户是否拥有对数据库声明的权限

                【讨论】:

                  【解决方案10】:
                  $db['default'] = array(
                      'dsn'   => '',
                      'hostname' => 'localhost',
                      'username' => 'root',
                      'password' => '',
                      'database' => 'xxx',
                      'dbdriver' => 'mysqli',
                      'dbprefix' => '',
                      'pconnect' => FALSE,
                      'db_debug' => (ENVIRONMENT !== 'production'),
                      'cache_on' => FALSE,
                      'cachedir' => '',
                      'char_set' => 'utf8',
                      'dbcollat' => 'utf8_general_ci',
                      'swap_pre' => '',
                      'encrypt' => FALSE,
                      'compress' => FALSE,
                      'stricton' => FALSE,
                      'failover' => array(),
                      'save_queries' => TRUE
                  );
                  

                  【讨论】:

                    【解决方案11】:

                    我也遇到了同样的问题。 由于我使用xampp并且我在本地运行我的codeigniter应用程序,最后我通过替换解决了这个问题: '主机名' => '本地主机' 经过 '主机名' => '127.0.0.1:33065' :33065 是 xampp 默认为 phpmyadmin 分配的端口。 如果您在 xampp 默认选项中运行您的项目,则更改此设置就足够了(希望如此)。 但是,如果您不这样做,我猜,您可以搜索您正在使用哪个端口进行数据库连接,并使用“:”将其添加到您的主机名(如果您不确定您使用的是哪个端口,您总是可以在您的数据库管理工具 -phpmyadmin 或您正在使用的工具 - 在选项上使用哪个端口)。

                    【讨论】:

                      猜你喜欢
                      • 2021-06-08
                      • 1970-01-01
                      • 2017-08-20
                      • 2014-06-10
                      • 1970-01-01
                      • 2020-07-13
                      • 1970-01-01
                      • 1970-01-01
                      • 2014-03-08
                      相关资源
                      最近更新 更多