Typeco中的CommentToMail插件数据库查询失败的解决方案
我擦他奶奶的,我就说博客为啥大半年没有人评论~ 原来是BUG导致评论不了~
在这里还是多谢 @jieyaomonster 大佬发现了这个bug~
bug描述
在装了 CommentToMail 插件 4.1.1 版本的Typecho博客上评论的话要么没有反应,要么出现Database Query Error
错误,如下图:
而且有几乎100%的复现率
解决
看了看插件源码~几经周转找到了BUG代码
在\usr\plugins\CommentToMail
文件夹中的Plugin.php
文件的 248行
, 代码如下
// 添加至队列
$cfg = (object)$cfg;
$db = Typecho_Db::get();
$prefix = $db->getPrefix();
$id = $db->query(
$db->insert($prefix.'mail')->rows(array(
'content' => base64_encode(serialize($cfg)),
'sent' => false
))
);
冷静分析了一下…… 发现好像是typecho的Db类中的insert()方法返回的对象实例不能被query()方法执行查询
想了想,决定使用传统方法:使用sql语句的方法传参给query()方法执行查询。虽然不如对象实例快,字符串拼接也费时间,但是我低头看了看时间02点16分
我的天,明天还有课呢!!!!!!!
飞快地改了代码,测试,通过!睡觉觉~~~
改进代码:
// 添加至队列
$cfg = (object)$cfg;
$db = Typecho_Db::get();
$prefix = $db->getPrefix().'mail';
$content = base64_encode(serialize($cfg));
//采用字符串拼接的方式写出sql语句,再交给query()方法执行查询
$sql = "INSERT INTO `$prefix`(`content`, `sent`) VALUES ('$content',false);";
$id = $db->query($sql);
总结明天写吧 困死本喵瞄了~~~
测试评论
测试回复评论
测试评论
测试回复评论
测试二级评论