WordPress3.5之后版本“Notice: wpdb::prepare的调用方法不正确”的解决方法
wordpress 更新至3.5及以上版本时,主题或插件在调用数据库时可能会出现如下报错:
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
有网友说是prepare函数缺少第二个参数,于是偷懒修改如下:
// 原语句 $wpdb->query($wpdb->prepare("UPDATE $table_name SET status= '$status' WHERE id='$id'")); // 修改后 $wpdb->query($wpdb->prepare("UPDATE $table_name SET status= '$status' WHERE id='$id'", ""));
随之又出现新报错:
Notice: wpdb::prepare的调用方法不正确。查询参数wpdb::prepare()必须有占位符。 请查阅调试WordPress来获取更多信息。 (这个消息是在3.9.0版本添加的。) in ……/wp-includes/functions.php on line 4137
接着扒文档,于是有了如下修改:
// 原语句 $wpdb->query($wpdb->prepare("UPDATE $table_name SET status= '$status' WHERE id='$id'")); // 修改后 $wpdb->query($wpdb->prepare("UPDATE $table_name SET status = %s WHERE id=%d", $status, $id));
其中转义字符常用的几个:
%d:输入输出中的格式控制,以整数的形式输入输出 %f:输入输出中的格式控制,以小数的方式输入输出 %s:输入输出中的格式控制,以字符串的形式输入输出
参考:http://make.wordpress.org/core/2012/12/12/php-warning-missing-argument-2-for-wpdb-prepare/