Emlog6.0标签不存在提示SQL执行错误的解决办法
【摘要】 资源说明 使用的em...
资源说明
使用的emlog6.0,在发现访问不存在的TAG(标签)时候,出现了如下图的SQL报错页面,如何优化这个BUG,或者是修复这个错误呐?
教程开始
1.分析一下出现的问题
首先,找到文件include\controller\tag_controller.php”,其文件内容如下
关键就是在上图箭头所指的地方,报的SQL错误就是tid不对
定位到“include\model\tag_model.php”文件,第46行,代码如下:
function getTagByName($tagName) { $tagId = $this->getIdFromName($tagName); return $this->getTagById($tagId); }在同文件内,定位到171行的函数getIdFromName():
/** * 从标签名查找标签ID * @param string $tagName 标签名 * @return int|bool 标签ID | FALSE(未找到标签) */ function getIdFromName($tagName){ $sql = "SELECT `tid` FROM `" . DB_PREFIX . "tag` WHERE `tagname` = '" . $this->db->escape_string($tagName) . "'"; $query = $this->db->query($sql); if ($this->db->num_rows($query) === 0) { return FALSE; } $result = $this->db->fetch_array($query); return $result['tid']; }
通过分析,当Tag名不存在的时候,此函数返回FALSE bool变量
那么变量$tagId就被赋值为bool值 FALSE,不是约定的tagID数值变量
所以问题就出在这里!
2.进行修复只需要把上述函数中10~12行做如下修改:
if ($this->db->num_rows($query) === 0) { header('HTTP/1.1 301 Moved Permanently'); header('Location:/?keyword='.urlencode($tagName)); exit(0); }
就是做了一个301的跳转,跳转到关键词搜索页面,这样就可以避免用户出现的报错页面了