易优eyoucms程序 SQL数据查询标签使用指南
一、标签基础说明
- 标签名称:
{eyou:sql}{/eyou:sql}
- 作用:用于在模板中执行自定义的 MySQL 查询语句,获取数据库内容
- 适用场景:标准标签无法满足需求时,可使用 SQL 标签灵活查询任意数据表内容
- 缓存机制:支持数据缓存,提高性能,默认缓存时间为 25 小时(86400 秒)
二、使用语法
smarty
{eyou:sql sql='SELECT * FROM __PREFIX__table_name WHERE condition' cachetime='3600' empty='暂无数据'} {$field.字段名} {/eyou:sql}
三、属性说明
属性名 | 默认值 | 说明 |
---|---|---|
sql |
- | 需要执行的 SQL 查询语句。注意:表前缀请使用 __PREFIX__ 替代 |
cachetime |
86400 |
数据缓存时间(单位为秒),设置为 -1 表示不缓存 |
empty |
- | 查询结果为空时显示的提示文案 |
mod |
- | 每隔 N 行输出的内容,常用于添加分隔符或样式类名 |
id |
field |
自定义变量名,如 id='data' 后可通过 {$data.字段名} 调用 |
四、字段说明
- 所有 SQL 查询返回的字段均可通过
{$field.字段名}
调用 - 支持内置变量:
{$key}
:当前记录索引(从 0 开始){$i}
:当前记录顺序编号(从 1 开始)
五、使用示例
示例1:查询栏目信息
smarty
{eyou:sql sql='SELECT id,typename,dirname,litpic FROM __PREFIX__arctype WHERE id = 2' cachetime='-1'} {$field.typename} {/eyou:sql}
说明:查询栏目ID为2的数据,且关闭缓存。
示例2:输出索引与序号
smarty
{eyou:sql sql='SELECT id,typename,dirname,litpic FROM __PREFIX__arctype WHERE id = 2' cachetime='-1'} {$key} - {$i} {/eyou:sql}
效果:
0 - 1 1 - 2 2 - 3 3 - 4 4 - 5
示例3:调用多个字段并格式化输出
smarty
{eyou:sql sql='SELECT id,typename,dirname FROM __PREFIX__arctype LIMIT 0,5'} <p>ID: {$field.id} | 栏目名: {$field.typename} | 目录名: {$field.dirname}</p> {/eyou:sql}
说明:展示栏目ID、栏目名称和目录名。
示例4:带条件查询 + 分页处理(伪分页)
smarty
{eyou:sql sql='SELECT id,title FROM __PREFIX__archives WHERE typeid = 3 LIMIT 0,10'} <a href="/view/{$field.id}.html">{$field.title}</a><br/> {/eyou:sql}
说明:查询栏目ID为3的文章列表,并生成链接。
示例5:结合变量名自定义(id属性)
smarty
{eyou:sql sql='SELECT id,title FROM __PREFIX__archives LIMIT 0,5' id='post'} <h3>{$post.title}</h3> <p>ID: {$post.id}</p> {/eyou:sql}
说明:将默认变量field
替换为post
,更清晰表达数据含义。
六、注意事项
- SQL 安全性:避免直接拼接用户输入,防止 SQL 注入攻击。
- 性能优化:合理设置
cachetime
缓存时间,减少频繁查询数据库。 - 字段别名:若字段名重复或冲突,建议使用 AS 设置别名。
- 表前缀:统一使用
__PREFIX__
替代实际表前缀,确保兼容性。 - 错误调试:若 SQL 报错,请检查语法是否正确,推荐先在数据库客户端测试后再写入模板。
七、高级技巧
1. 动态传参(基于URL参数)
smarty
{eyou:sql sql="SELECT * FROM __PREFIX__archives WHERE typeid={$Get.typeid}"} ... {/eyou:sql}
说明:通过 URL 参数动态查询不同栏目的文章。
2. 多表联合查询
smarty
{eyou:sql sql='SELECT a.title, b.typename FROM __PREFIX__archives a LEFT JOIN __PREFIX__arctype b ON a.typeid = b.id WHERE a.id = 1'} 文章标题:{$field.title},所属栏目:{$field.typename} {/eyou:sql}
说明:实现跨表查询,获取文章及其所属栏目名称。
八、总结
{eyou:sql}
是一个非常强大的标签,适用于需要高度定制化的数据查询场景。虽然它提供了极大的灵活性,但也要求开发者具备一定的 SQL 基础和安全意识。合理使用该标签,可以显著提升模板开发效率和功能扩展性。
✅ 推荐优先使用系统内置标签,仅在必要时才使用 SQL 标签以保证系统的稳定性和安全性。
更新时间:2025-05-06 10:38:11