codeigniter数据库连接需准确配置hostname、username、password、database和dbdriver五项参数;ci3在application/config/database.php中设置,ci4则为app/config/database.php;启用pconnect需配合php-fpm并重启服务;多环境可通过$active_group或environment常量切换;验证用$this->db->conn_id及select version()。

要在CodeIgniter中让PHP应用稳定连接MySQL或MariaDB,必须准确填写数据库主机、用户名、密码、库名和驱动类型,任何一项填错都会导致“Unable to connect to your database server”错误。
确认基础配置文件位置与结构
打开 application/config/database.php 文件,这是唯一有效的数据库配置入口。CI3和CI4均沿用此路径,但CI4中部分配置已迁移至app/Config/Database.php——若你使用的是CI4,请先确认版本:执行php -r "echo CI_VERSION;",输出以4.开头即为CI4,本教程默认按CI3结构讲解(CI3仍广泛用于生产环境)。
找到以$db['default'] = array(开头的数组块,所有参数都在此处修改,不要新增顶层变量或改动$active_group以外的全局配置项。
填写核心连接参数
逐项设置以下五项,缺一不可:
hostname:填数据库服务器IP或域名,本地开发填localhost即可;若用Docker或远程数据库,必须填真实IP(如192.168.10.10),填127.0.0.1在某些Linux+MySQL组合下会绕过socket直连TCP,反而引发权限拒绝。
username 和 password:必须与MySQL中CREATE USER语句创建的账号完全一致,注意大小写和特殊字符;若密码含$、@等符号,在PHP数组中无需额外转义,直接原样写入即可。
database:填已存在且授权给该用户的库名,CI不会自动建库;若填错名称,首次调用$this->db->query()时将报错Unknown database。
dbdriver:根据PHP已启用的扩展选值,mysqli(推荐)、pdo或mysql(已废弃);若选mysqli但PHP未开启mysqli扩展,Apache/Nginx日志将记录Call to undefined function mysqli_init()。
启用持久连接提升并发性能
将'pconnect' => FALSE改为'pconnect' => TRUE。
这一步启用后,PHP-FPM进程结束时不会关闭MySQL连接,下次请求可复用同一连接,减少TCP握手与认证开销;但【仅适用于PHP运行在FPM或FastCGI模式,不适用于CLI或Apache mod_php】,否则可能因连接泄漏导致MySQL报Too many connections。
修改后务必重启PHP-FPM服务:执行sudo systemctl restart php*-fpm(*为PHP版本号,如php8.1-fpm)。
多环境数据库配置切换
方法一:通过$active_group变量动态指定
在database.php顶部添加判断逻辑:
if (strpos($_SERVER['HTTP_HOST'], 'dev.') === 0) {<br> $active_group = 'development';<br>} elseif (strpos($_SERVER['HTTP_HOST'], 'prod.') === 0) {<br> $active_group = 'production';<br>} else {<br> $active_group = 'default';<br>}
然后在文件末尾定义对应分组,例如:
$db['development'] = array(<br> 'hostname' => '127.0.0.1',<br> 'username' => 'dev_user',<br> 'password' => 'dev_pass',<br> 'database' => 'myapp_dev',<br> 'dbdriver' => 'mysqli',<br> 'pconnect' => FALSE<br>);
方法二:利用CI内置环境常量(更安全)
确保index.php中define('ENVIRONMENT', 'development');已设置,然后在database.php中用if (ENVIRONMENT === 'production')分支配置生产库参数——这种方式避免依赖HTTP头,防止被伪造Host头绕过。
验证连接是否生效
第一步:在任意控制器中添加测试代码:
$this->load->database();<br>var_dump($this->db->conn_id !== false);
第二步:访问该控制器URL,页面输出bool(true)即表示连接成功;若输出bool(false)或报错,请检查MySQL服务是否运行(sudo systemctl status mysql)以及用户是否已授权(SELECT User,Host FROM mysql.user;)。
第三步:执行简单查询确认读写能力:
$query = $this->db->query("SELECT VERSION() as ver");<br>echo $query->row()->ver;
看到MySQL版本号即说明全部配置正确,数据库已就绪可用。










