WordPress 3.5 与 wpdb::prepare() 报错解决办法

所属分类: CMS教程 / WordPress 阅读数: 313
收藏 0 赞 0 分享

WordPress 3.5 正式发布, 这个版本包括大量更新. 启用了最新的响应式布局默认主题 Twenty Twelve; 改版了 Admin 界面, 更加简洁而且针对移动设备进行了优化; Media 功能也得到极大的提高, 现在更加没有理由使用其他图床服务了.

好话说完了, 是时候 "但是" 了. 但是... WordPress 秉承一贯的作风, 也偷偷改了一些内部方法, 现在 wpdb::prepare() 必须填入第二个参数, 否则报错如下.

Warning: Missing argument 2 for wpdb::prepare(), called in xxx.php on line 75 and defined in /www/wp-includes/wp-db.php on line 990

wpdb->prepare() 方法在 WordPress 3.5 中报错

wpdb::prepare() 的第二个参数

从技术上 WordPress 这样修改 prepare 并没有错, 因为这是用来组装 SQL 语句的方法, 按常理来说必须有带变量的字符串作为第一个参数和第二个作为变量的参数, 这是为了避免 SQL 注入所引起的安全问题. 但是 WordPress 从 2.2 或者更早版本允许了忽略第二个参数的写法, 现在突然令第二个参数成为必填, 必然导致很多主题和插件不能正常使用.

我发布的所有 WordPress 主题和最新评论插件 WP-RecentComments 都中枪了. 感谢 neoner 提醒, 半个月前我更新 WP-RecentComments 解决了这个问题, 但还没有时间改主题, 因为主题审核太麻烦了.

解决办法

在更新主题之前, 我先在这里说说解决办法, 让用户们自己可以先解决一下, 相信还有其他主题或者插件可能也会有类似问题, 希望对大家有帮助.

    我们需要先定位出现问题的文件和代码. PHP 的代码报错很精准的, 打开报错提醒中的文件 (前一个文件, 不是 wp-db.php), 找到代码 $wpdb->prepare.为该方法添加一个空串作为第二个参数, 比如: $wpdb->prepare('xxx'); 改为 $wpdb->prepare('xxx', ''); 即可.
总结

WordPress 也不是第一次偷偷修改方法调用方式了, WordPress 2.7 的时候也要求 comments_template 必须输入第二个方法, 但是当时是为了扩展功能, 这次我真的不解. 除了安全考虑, WordPress 也可能有意淘汰一些不积极更新的主题, 我的主题明明向后兼容做得很好的, 实在太没节操了.

更多精彩内容其他人还在看

wordpress wp_list_categories(分类的链接列表)的使用方法

用分类做为导航拦及wp_list_categories的用法,下面是具体的示例,感兴趣的朋友可以参考下哈
收藏 0 赞 0 分享

wordpress通过当前文章的ID获取文章标题内容简介的信息

wordpress通过当前文章的ID获取文章的信息用的极多,在wordpress二次开发中经常会使用到,本文将详细介绍,需要了解的朋友可以参考下
收藏 0 赞 0 分享

wordpress获取当前文章的评论数实现代码

wordpress获取当前文章的评论数,是每一个使用wordpress的朋友所疑惑不解的地方,本文将给出解决方法,可供参考
收藏 0 赞 0 分享

wordpress添加更新数据库等操作提示报错

很长时间没有动过wordpress里的布局了,当我进行添加和更新操作时,连连报错,于是搜集整理一些,拿出来和大家分享
收藏 0 赞 0 分享

WordPress高级自定义布局的内容编辑器(TinyMCE)模板

WordPress的编辑器TinyMCE是一个非常强大的工具,对于网页设计师来说,使用WordPress的编辑器TinyMCE是没什么困难的,但是对于那些不怎么了解HTML的人来说却用起来不是那么的得心应手
收藏 0 赞 0 分享

WordPress手动修改文章排列顺序摆脱按发布时间升降序排列

我们常见的WordPress站点文章排序,通常情况下是按发布时间的升序或降序方式排列,想手动修改文章的排列方式,可以随意更改文章的排列位置这种排序方式几乎可以满足我们的特殊需求了
收藏 0 赞 0 分享

wordpress如何设置文章置顶以及区分置顶文章与普通文章

很多博客都有自己的置顶文章,除了位置差异外,跟其他文章是没有任何区别的,那我们怎样才能将它们区别开来呢,本文将介绍几种方法,需要的朋友可以参考下
收藏 0 赞 0 分享

WordPress插件和主题编写时cookie应如何设置

编写WordPressc插件和主题的时候,经常需要用到cookie,但是如果你在WordPress主题文件中直接使用php的setcookie()来发送cookie,那是完全不行的,我怀疑WordPress初始化的时候已经发送了其他输出,才导致setcookie失效
收藏 0 赞 0 分享

Dreamweaver代码的格式化功能掌控html代码的格式

今天偶然发现了Dreamweaver的一个非常有用的功能,就是代码的格式化功能,我们写的html或者css代码都计较混乱,难以阅读,等到所使用的标签越来越多,嵌套越来越深,这时我们已经很难去掌控html代码的格式问题了
收藏 0 赞 0 分享

如何给wordpress创建动态的置顶文章长时间引起注意

置顶文章的作用是希望长时间引起读者注意,可以表明站点的简介、版权声明、友情链接的交换原则等;本文将介绍如何给wordpress创建动态的置顶文章,需要了解的朋友可以参考下
收藏 0 赞 0 分享
查看更多