赞片CMSSQL语句
学完这篇,你能看懂赞片CMS(基于 ThinkPHP 内核的影视 CMS)的数据库结构,自己写出可用的 SQL 语句,并把查询、批量替换、数据清理这几类最常见的操作安全地跑完。
赞片CMS 的模板标签能满足大部分展示需求,但一旦遇到「全站换图片域名」「批量改分类」「查出某个演员的所有片子」这类活,标签就不好使了,最后还是得直接写 SQL。下面按顺序来。
第一步:确认表前缀和后台 SQL 入口
这一步的目的是拿到两个关键信息:你的数据库表前缀是什么,以及从哪儿执行语句。
先找表前缀。用 FTP 或宝塔面板打开网站根目录,进入 Application/Common/Conf/config.php,找到这一行:
'DB_PREFIX' => 'zanpian_',
单引号里的就是前缀。下面所有示例都按 zanpian_ 写,你的站如果是别的,全部替换掉。
再进后台执行语句。登录 /admin.php(部分版本是 /index.php/admin),点顶部菜单「系统」,左侧栏选「数据库管理」,再点「执行 SQL 语句」,里面有个多行文本框,语句写进去点「提交」即可。如果你用的是 phpMyAdmin(宝塔面板 → 数据库 → 管理),选好左侧对应的库,点顶部「SQL」标签,效果一样。
注意:phpMyAdmin 里执行前一定要先在左侧点中你的站点数据库,否则语句会跑到 information_schema 里去报错。
第二步:摸清表结构,别瞎猜字段名
这一步做完,你就知道数据存在哪张表、字段叫什么,后面写语句才有底气。
赞片CMS 的核心表通常是这几张:
zanpian_vod:影片主表,含vod_id、vod_name、vod_pic、type_id、vod_status、vod_addtime等zanpian_vod_content:影片详情(剧情简介)zanpian_vod_type:分类表,含type_id、type_name、type_pidzanpian_news:文章/资讯表zanpian_star:演员表
查全部表:
SHOW TABLES LIKE 'zanpian_%';
查某张表的字段:
DESC zanpian_vod;
注意:不同版本的赞片CMS 字段名有差异,比如有的版本播放地址存在
vod_play_url(主表),有的单独拆到zanpian_vod_playurl。动手前先DESC一遍,别照抄别人的教程。
第三步:写只读查询,先看结果再谈修改
这一步的目标是跑通一条 SELECT,确认能拿到你想要的数据。
按分类查最新 20 部影片:
SELECT vod_id, vod_name, vod_pic, vod_addtime
FROM zanpian_vod
WHERE type_id = 5 AND vod_status = 1
ORDER BY vod_id DESC
LIMIT 20;
带分类名的联表查询:
SELECT v.vod_id, v.vod_name, t.type_name
FROM zanpian_vod v
LEFT JOIN zanpian_vod_type t ON v.type_id = t.type_id
WHERE v.vod_status = 1
ORDER BY v.vod_id DESC
LIMIT 20;
按片名模糊搜:
SELECT vod_id, vod_name FROM zanpian_vod WHERE vod_name LIKE '%流浪%';
注意:影视站数据动辄几万几十万条,
WHERE后面没有索引字段(vod_id、type_id、vod_name)的全表扫描会很慢,后台可能直接超时白屏。加LIMIT是好习惯。
第四步:批量更新,先 SELECT 验证再 UPDATE
这一步做的是真正的写操作,也最容易出事。
比如全站换了图片 CDN 域名,要把 vod_pic 里的旧域名替换掉。先查有多少条会被改:
SELECT COUNT(*) FROM zanpian_vod WHERE vod_pic LIKE 'http://old.com/%';
确认数量对得上,再执行:
UPDATE zanpian_vod
SET vod_pic = REPLACE(vod_pic, 'http://old.com/', 'http://new.com/')
WHERE vod_pic LIKE 'http://old.com/%';
批量把某个分类下的影片全部下架:
UPDATE zanpian_vod SET vod_status = 0 WHERE type_id = 5;
注意:UPDATE 之前务必先备份。宝塔面板「数据库」→ 对应库 → 「备份」,或者后台「数据库管理」里的「备份数据库」。SQL 没有撤销键,
UPDATE漏写WHERE会把整张表刷成同一个值。同理,DELETE FROM zanpian_vod WHERE type_id = 5;少个条件就是清库。
第五步:在模板里调用 SQL(可选)
如果你要在前台页面直接读数据,赞片CMS 模板支持 <php> 标签配合 ThinkPHP 的模型方法:
<php>
$list = M('vod')->query("SELECT vod_id,vod_name FROM zanpian_vod WHERE type_id=5 LIMIT 10");
</php>
<volist name="list" id="vo">
<a href="{:zanpian_url('vod/read',array('id'=>$vo['vod_id']))}">{$vo.vod_name}</a>
</volist>
注意:模板里的
<php>标签需要在后台「系统」→「基本设置」里确认模板 PHP 解析未被关闭。另外前台拼接 SQL 一定要对用户传入的参数做intval()处理,否则就是注入漏洞。
改完数据后,去后台「系统」→「更新缓存」点一下「清除缓存」,不然前台页面还是旧内容,你会以为 SQL 没生效。
小结
- 表前缀在
Application/Common/Conf/config.php的DB_PREFIX里,执行入口在后台「系统 → 数据库管理 → 执行 SQL 语句」或 phpMyAdmin。 - 动手前先
SHOW TABLES和DESC 表名,赞片CMS 各版本字段有差异。 - 查询必带
LIMIT,WHERE尽量走索引字段,否则大表会超时。 - 任何 UPDATE / DELETE 先跑一遍 SELECT 数数量,再全库备份。
- 改完数据记得清缓存,模板里写 SQL 要对参数做整型过滤防注入。
原文链接:https://www.gj0.com/thread-871.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。