织梦CMS的数据库连接是其核心功能之一,理解它对于排查问题、进行二次开发至关重要。

(图片来源网络,侵删)
核心文件:common.inc.php
织梦CMS的数据库连接和初始化工作,几乎完全由一个核心文件完成,即:
/include/common.inc.php
这个文件是整个系统的“启动文件”和“配置中心”,当你访问任何一个织梦页面时,PHP引擎首先会加载这个文件,它负责执行以下关键任务:
- 加载配置信息:读取根目录下的
data/config.cache.inc.php文件,将网站的全局配置(如网站名称、关键词、数据库信息等)加载到内存中。 - 连接数据库:根据加载的配置信息,建立与MySQL数据库的连接。
- 定义全局变量和函数:初始化一些常用的全局变量和函数,供后续页面调用。
数据库配置文件:config.inc.php
虽然 common.inc.php 是执行连接的文件,但实际的数据库连接参数(主机名、用户名、密码、数据库名等)存储在另一个文件中:

(图片来源网络,侵删)
/include/config.inc.php
注意:在较新版本的织梦中,你可能会在后台看到配置数据库信息的界面,这些信息最终会被保存到 /data/config.cache.inc.php 文件中。common.inc.php 会优先加载这个缓存文件,如果缓存文件不存在或无效,它才会去读取原始的 config.inc.php。
config.inc.php 文件内容详解
打开 /include/config.inc.php 文件,你会看到类似下面的代码结构:
<?php //数据库连接信息 $cfg_dbhost = 'localhost'; // 数据库主机 $cfg_dbname = 'dedecmsv57'; // 数据库名 $cfg_dbuser = 'root'; // 数据库用户名 $cfg_dbpwd = 'password'; // 数据库密码 $cfg_dbprefix = 'dede_'; // 数据库表前缀 $cfg_db_language = 'gbk'; // 数据库语言版本 ?>
字段说明:
$cfg_dbhost: 你的数据库服务器地址,如果是本地服务器,通常是localhost或0.0.1,如果是远程服务器,则填入IP地址或域名。$cfg_dbname: 你为织梦创建的数据库名称。$cfg_dbuser: 连接数据库的用户名。$cfg_dbpwd: 连接数据库的密码。$cfg_dbprefix: 数据库表的前缀。这是一个非常重要的安全设置,默认是dede_,如果你的网站和其他程序共享一个数据库,修改这个前缀可以避免表名冲突,它也能在一定程度上防止SQL注入攻击。$cfg_db_language: 数据库的字符集,常见值有gbk和utf-8。请确保你的数据库、网站程序编码和此设置保持一致,否则会出现乱码。
连接数据库的完整流程
让我们梳理一下从访问网站到数据库连接成功的完整流程:

(图片来源网络,侵删)
- 用户访问:用户在浏览器中输入网址,
http://www.yourdomain.com/。 - 入口文件:服务器加载根目录下的
index.php文件。 - 加载核心文件:
index.php文件的第一行代码几乎总是require_once (dirname(__FILE__) . '/include/common.inc.php');,这引入了核心启动文件。 - 加载配置:
common.inc.php文件首先会检查/data/config.cache.inc.php是否存在且有效,如果存在,则直接加载,如果不存在,它会去加载/include/config.inc.php,并将其内容写入缓存文件。 - 建立连接:
common.inc.php读取到数据库配置信息后,会调用include/dedesql.class.php文件中的class DedeSQL类来建立实际的数据库连接,连接成功后,会生成一个全局的$dsql对象。 - 后续操作:网站的其他页面(如文章页、列表页等)通过
require_once 'common.inc.php';引入核心文件,从而获得$dsql对象,并使用它来执行SQL查询,获取数据并展示给用户。
常见问题排查
当网站出现“无法连接数据库”或“数据库错误”时,你应该检查以下几点:
检查 config.inc.php 文件内容
- 用户名和密码是否正确:这是最常见的原因,请确认你的数据库用户名和密码无误。
- 数据库名是否存在:确认
$cfg_dbname的值是你创建的、并且已经存在的数据库名。 - 数据库主机地址:确认
$cfg_dbhost是否正确,如果是本地,localhost通常没问题,但某些情况下(如使用Docker或特定环境)可能需要改为0.0.1。 - 数据库服务器权限:确保你的数据库用户有权限访问你指定的数据库。
检查文件权限
- 确保
/include/config.inc.php文件存在并且可被Web服务器(如Apache、Nginx)的运行账户读取。 - 确保
/data/目录存在并且有写入权限,因为织梦需要向这个目录写入config.cache.inc.php缓存文件,权限通常设置为755或777(777有安全风险,不推荐)。
检查数据库服务状态
- 确保你的MySQL/MariaDB数据库服务正在运行,可以通过服务器的管理面板或命令行
systemctl status mysql(Linux) 来检查。
检查字符集
- 如果网站出现乱码,请检查
$cfg_db_language的设置,确保它与你的数据库、网站文件的编码一致(全部使用utf-8)。
| 文件/对象 | 作用 | 位置 |
|---|---|---|
config.inc.php |
存储数据库连接参数(主机、用户、密码等) | /include/ |
common.inc.php |
执行连接操作,加载配置,初始化全局 $dsql 对象 |
/include/ |
$dsql |
全局数据库连接对象,网站所有页面通过它来操作数据库 | 由 common.inc.php 创建 |
修改数据库配置后,如果问题依旧,请尝试删除 /data/config.cache.inc.php 文件,让系统重新生成缓存,如果仍然不行,请检查服务器的错误日志(error_log),通常会记录更详细的错误信息,如“Access denied for user...”等,这能帮助你快速定位问题。
