dede数据库读取配置文件在何处?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文

DedeCMS 读取数据库的核心位置主要有两个:

  1. 全局核心配置文件/include/common.inc.php
  2. 数据库操作类文件/include/dedesql.class.php

下面我将详细解释这两个文件的作用,以及如何在实际代码中追踪和使用它们。


核心配置文件:/include/common.inc.php

这是整个网站的“总开关”和“连接器”,当网站任何一个页面被加载时,几乎都会首先引入这个文件,它的主要作用是:

  • 定义数据库连接信息:在这个文件里,你网站的数据库主机名、用户名、密码和数据库名都是以常量的形式被定义的。
  • 建立数据库连接:它会在脚本执行时,自动读取这些常量信息,并使用 mysql_connect() (旧版) 或 mysqli_connect() (新版) 函数建立一个到数据库的持久连接。
  • 选择数据库:连接成功后,它会使用 mysql_select_db()mysqli_select_db() 函数选择要操作的数据库。
  • 设置字符集:它会执行 mysql_query("SET NAMES 'gbk'"); 或类似的语句,确保网站和数据库之间的数据传输字符集正确(旧版常用GBK,新版常用UTF-8)。

如何找到它?

  1. 通过 FTP 或文件管理器,登录你的网站根目录。
  2. 进入 /include/ 文件夹。
  3. 找到 common.inc.php 文件,用文本编辑器(如 VS Code, Sublime Text, Notepad++)打开它。

你会看到类似这样的代码(以UTF-8版本为例):

//数据库连接信息
$cfg_dbhost = 'localhost'; // 数据库主机
$cfg_dbname = 'dedecmsv57'; // 数据库名
$cfg_dbuser = 'root'; // 数据库用户名
$cfg_dbpwd = 'password'; // 数据库密码
$cfg_dbprefix = 'dede_'; // 数据库表前缀
$cfg_db_language = 'utf8'; // 数据库语言
// ... 其他配置代码 ...
// 连接数据库
if(!$link = @mysqli_connect($cfg_dbhost, $cfg_dbuser, $cfg_dbpwd, $cfg_dbname, $cfg_dbport)){
    if(file_exists(dirname(__FILE__).'/../data/admin/errtxt.php')){
        header('Location:../data/admin/errtxt.php');
    }else{
        die("Connect to MySQL server error!<br />Please check your database settings in the file /data/config.cache.inc.php");
    }
}
// 设置字符集
mysqli_query($link, "SET NAMES '$cfg_db_language'");

如果你想修改网站的数据库连接信息(比如换了主机或改了密码),主要就是修改这个文件


数据库操作类:/include/dedesql.class.php

这个文件是 DedeCMS 的“发动机”和“扳手”,它封装了所有与数据库交互的具体操作,SELECT (查询), INSERT (插入), UPDATE (更新), DELETE (删除) 等。

当你需要在某个页面(比如首页、列表页、内容页)读取数据时,并不会直接写 SQL 语句,而是会调用这个类提供的方法。

如何找到它?

  1. 同样在 /include/ 文件夹下。
  2. 找到 dedesql.class.php 文件并打开。

这个文件的核心是一个名为 DedeSql (或类似名称) 的类,它提供了以下常用方法:

  • SetQuery($sql): 设置要执行的SQL语句。
  • Execute(): 执行SQL语句(通常是 INSERT, UPDATE, DELETE 等写操作)。
  • GetOne(): 执行查询并只返回第一条结果(一个数组)。
  • GetArray(): 执行查询并返回所有结果(一个二维数组)。
  • GetTotalRow(): 获取查询结果的总行数。
  • GetLastID(): 获取最后一次插入操作(INSERT)产生的自增ID。

在实际代码中如何追踪数据读取过程?

以一个常见的场景为例:在首页调用一篇指定的文章

假设你在首页模板 index.htm 里看到了这样一段代码:

{dede:arclist row='1' titlelen='30'}
    <a href='[field:arcurl/]'>[field:title/]</a>
{/dede:arclist}

这段代码由 DedeCMS 的模板引擎解析,当解析 {dede:arclist} 标签时,系统会执行以下步骤:

  1. 引入核心文件:系统首先会执行 include/common.inc.php,建立数据库连接。
  2. 调用数据库类:系统会实例化 dedesql.class.php 中的 DedeSql 类。
  3. 执行查询:系统会根据 arclist 标签的参数(row='1'),在 DedeSql 类中动态生成一条 SQL 查询语句,大概是这个样子:
    SELECT id, title, arcurl FROM `dede_archives` ORDER BY id DESC LIMIT 1
  4. 获取数据:系统调用 $dsql->GetArray() 方法执行这条 SQL,并将查询到的结果(一个包含 id, title, arcurl 等字段的数组)返回。
  5. 填充模板:模板引擎将返回的数据填充到 [field:title/][field:arcurl/] 的位置,最终生成 HTML 代码输出到浏览器。

如果你想手动修改这个查询逻辑,你需要找到处理 arclist 标签的PHP文件,这个文件通常在 /include/taglib/ 目录下,名为 arclist.lib.php

打开 arclist.lib.php,你会找到核心的SQL查询和数据库操作代码,

// 在 arclist.lib.php 中
function lib_aritelist(&$ctag, &$refObj){
    // ... 一些参数处理 ...
    // 拼接SQL语句
    $sql = "SELECT * FROM `#@__archives` ORDER BY id DESC LIMIT 0, $row";
    // 执行查询
    $dsql = new DedeSql(false);
    $dsql->SetQuery($sql);
    $dsql->Execute('al');
    // ... 循环处理结果并返回给模板 ...
}
位置 文件名 作用 修改场景
全局配置 /include/common.inc.php 建立数据库连接,定义连接信息。 更换数据库主机、用户名、密码、数据库名。
数据库操作核心 /include/dedesql.class.php 封装所有SQL操作,提供查询、插入等方法。 一般不直接修改,除非是深度二次开发。
标签逻辑处理 /include/taglib/ 目录下的 .lib.php 文件 根据模板标签生成并执行SQL 修改特定标签(如arclist, loop)的查询逻辑和输出。

一句话概括:

common.inc.php 负责打开数据库大门,dedesql.class.php 提供了在门内搬运数据的工具箱,而各种 .lib.php 文件则负责根据“订单”(模板标签)来决定具体要搬运哪些数据。

-- 展开阅读全文 --
头像
c语言控制台窗口图形界面编程
« 上一篇 今天
织梦列表调用tag标签
下一篇 » 今天
取消
微信二维码
支付宝二维码

目录[+]