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/