原因就是sql读取的时候,默认优先匹配id,此时30a就会被隐式转换就会变成30,造成30和30a出现相同的内容。
解决办法:找到文件apps/home/model/ParserModel.php
找到代码(大概614行)
- $result = parent::table('ay_content a')->field($field)
- ->where("a.scode='$scode' OR b.filename='$scode'")
- ->where('a.status=1')
- ->join($join)
- ->decode()
- ->order('id DESC')
- ->find();
改成:
- $where = is_numeric($id) ? "a.id='$id' OR a.filename='$id'" : "a.filename='$id'";
- $result = parent::table('ay_content a')->field($field)
- ->where($where)
- ->where('a.status=1')
- ->where("a.date<'" . date('Y-m-d H:i:s') . "'")
- ->join($join)
- ->decode()
- ->find();
(红色文字即为改动部分)
原理:
就是对id进行判断,如果是数字的时候则进行id读取判断,否则进行filename判断。
但是这种做法有个缺点:如果当用户吧自定义url的设置为纯数字,并且和已有ID重复,仍旧会出现读取混乱情况,所以自定义url要避免使用纯数字,具体需要等官方修复
文章点评