使用 dedecms 标签(最推荐,最安全)
对于绝大多数场景,不推荐直接写原生SQL,而是使用织梦自带的标签,因为织梦标签已经做了安全处理,能有效防止SQL注入,并且语法更简洁。

调用指定ID的文章标题
如果你已经知道文章的ID,可以直接用 这会直接输出ID为1的文章的标题。 这是最常用的场景之一,比如在首页某个位置调用“公司新闻”栏目的最新几篇文章标题。 参数解释: 如果你想调用包含特定关键词的文章。 当你需要实现 核心语法: 假设我们要调用栏目ID为3下的所有文章标题。 注意: 这是一个更完整的例子,它会调用栏目ID为3的文章,并获取ID、标题、发布时间,同时生成正确的链接。 代码详解: 如果你是在一个自定义的PHP页面( 代码详解: 安全第一,防止SQL注入: 表前缀问题: 性能考虑: 对于99%的模板修改需求,优先使用 arctitle
{dede:arctitle id='1'/}
调用指定栏目(catid)下的文章标题
{dede:arclist row='10' titlelen='30' typeid='2'}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
typeid='2': 指定栏目ID为2,如果要调用多个栏目,用逗号隔开,如 typeid='2,5,8'。row='10': 调用10篇文章,len='30'`: 标题长度限制为30个字符(一个汉字算一个字符)。[field:title/]: 输出文章标题。[field:arcurl/]: 输出文章的链接地址。调用指定关键词(keyword)的文章标题

{dede:arclist row='5' keyword='织梦CMS'}
<li><a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a></li>
{/dede:arclist}
keyword='织梦CMS': 查询标题或关键词中包含“织梦CMS”的文章。
使用
dede_sql 标签(原生SQL调用)arclist 标签无法满足的复杂查询时(按特定字段排序、关联多表查询等),就需要使用 dede_sql 标签来执行原生SQL语句。{dede:sql sql='你的SQL语句'}
[field:字段名/]
{/dede:sql}
示例1:调用指定栏目ID下的文章标题
{dede:sql sql="SELECT title FROM `dede_archives` WHERE typeid=3"}
<a href="/plus/view.php?aid=[field:id/]" title="[field:title/]">[field:title/]</a>
{/dede:arclist}

dede_archives 是织梦默认的文章主表,如果你的数据库表前缀不是 dede_,请务必修改成你自己的前缀。title 字段,[field:id/] 是无法获取的,如果还需要文章ID和链接,需要同时查询这些字段。/plus/view.php?aid=[field:id/] 虽然可行,但不是最佳实践,更好的方法是使用织梦自带的函数来生成链接。示例2:更完善的调用(包含ID、标题、链接并分页)
{dede:sql sql="SELECT id, title, pubdate FROM `#@__archives` WHERE typeid=3 ORDER BY pubdate DESC LIMIT 0, 10"}
<li>
<a href="[field:array runphp='yes']
$arcRow = GetOneArchive(@me);
echo $arcRow['arcurl'];
[/field:array]" title="[field:title/]">
[field:title/]
</a>
<span>([field:pubdate function="MyDate('Y-m-d',@me)"/])</span>
</li>
{/dede:sql}
#@__archives:这是织梦推荐的表名写法,系统会自动替换成你配置的数据库表前缀,比硬编码 dede_ 更安全。ORDER BY pubdate DESC LIMIT 0, 10:按发布时间降序排列,并只取前10条记录。[field:array runphp='yes']...[/field:array]:这是一个非常强大的用法,当 runphp='yes' 时,@me 代表当前行的所有字段数据(一个数组),我们调用织梦内置的 GetOneArchive() 函数,传入这个数组,函数会返回一个包含文章完整信息(包括最终URL)的新数组,我们从中取出 arcurl 即可。function="MyDate('Y-m-d',@me)":调用织梦的日期格式化函数,将时间戳格式化为 年-月-日。
在PHP文件中直接调用SQL
yourpage.php)中调用,那么就需要直接使用PHP代码来操作数据库。<?php
require_once (dirname(__FILE__) . "/include/common.inc.php"); // 引入织梦核心文件
// 1. 准备SQL语句
$sql = "SELECT id, title FROM `#@__archives` WHERE typeid=3 ORDER BY id DESC LIMIT 10";
// 2. 执行查询
$dsql->SetQuery($sql);
$dsql->Execute();
// 3. 循环输出结果
while($row = $dsql->GetArray())
{
$arcUrl = GetOneArchive($row['id']);
echo "<li><a href='{$arcUrl['arcurl']}' title='{$row['title']}'>{$row['title']}</a></li>";
}
?>
require_once ...:这是必须的,引入织梦的核心配置和函数库。$dsql:这是织梦的全局数据库连接对象,可以直接使用。SetQuery() 和 Execute():设置并执行SQL语句。GetArray():获取查询结果的一行数据,返回一个关联数组。GetOneArchive($row['id']):根据文章ID获取文章的详细信息,包括最终的URL,注意这里传入的是ID,而不是整个数组。echo:使用PHP的 echo 语句来输出HTML。
重要注意事项
$sql = "SELECT title FROM dede_archives WHERE typeid={$_GET['id']}";$dsql->GetOne() 或 $dsql->Execute() 等方法,它们内部有处理机制,或者对变量进行严格的过滤和验证。
#@__ 作为表名前缀,#@__archives、#@__arctype,这样无论你的后台如何修改数据库前缀,代码都能正常工作。
SELECT *,只查询你需要的字段,如 SELECT id, title, pubdate。typeid、arctypeid、click、pubdate 等常用查询字段建立数据库索引,可以大幅提升查询速度。总结与推荐
场景
推荐方法
优点
缺点
常规列表调用
{dede:arclist}语法简单、安全、官方支持
灵活性较低,无法实现复杂查询
复杂查询需求
{dede:sql}灵活性极高,可执行任意SQL
需要编写SQL,有一定门槛,安全性需自己保证
在PHP文件中调用
PHP代码 +
$dsql功能最强大,可结合PHP逻辑
代码量稍多,需要PHP基础
{dede:arclist} 只有当它无法满足时,再考虑使用 {dede:sql} 或PHP代码。
