尝试使用 mysqli 连接到数据库时出现 Codeigniter 错误

Posted

技术标签:

【中文标题】尝试使用 mysqli 连接到数据库时出现 Codeigniter 错误【英文标题】:Codeigniter error when trying to connect to database using mysqli 【发布时间】: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中用户权限的问题 如果您使用 OSX,这是您的正确答案CodeIgniter: Unable to connect to your database server using the provided settings Error Message 【参考方案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】:

执行以下操作:

    applications/config/database.php 中,将dbport => '3306', 添加到默认数组$db['default'] = array();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 或您正在使用的工具 - 在选项上使用哪个端口)。

【讨论】:

以上是关于尝试使用 mysqli 连接到数据库时出现 Codeigniter 错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试连接到数据库时出现奇怪的错误

从 PHP 连接到我的本地主机 MySQL 实例时出现间歇性错误:mysqli_connect(): HY000/2013

未捕获的错误:连接到数据库时调用未定义的函数 mysqli_connect() [重复]

尝试使用 pymssql 连接到数据库时出现 KeyError

尝试使用 SQLWorkbench 连接到 Amazon Redshift 时出现操作超时错误

无法启用 mysqli 扩展 - PHP 7.1.12,无法连接到数据库