如何转换准备这个声明的WordPress WPDB $使用占位符?(How to convert t

2019-08-04 05:13发布

我有一个完美的工作WordPress的WPDB 3.5之前准备的语句。 这是我的路线:

$post_id = $wpdb->get_var($wpdb->prepare( "SELECT a.post_id
        FROM $metatable AS a
        JOIN $metatable AS b ON a.post_id = b.post_id
        WHERE a.meta_value = '$valuex1' AND b.meta_value = '$valuex2'"));

现在,在WordPress 3.5,这将返回一个警告,因为这是不完全消毒。 我已经修改了这个使用占位符由WordPress的建议:

$post_id = $wpdb->get_var($wpdb->prepare("SELECT a.post_id FROM $metatable AS a JOIN $metatable AS b ON a.post_id = b.post_id WHERE a.meta_value =%d AND b.meta_value =%s",$valuex1,$valuex2));

但是,现在不从数据库中检索正确的信息。 是不是有什么毛病我修改后的查询? 如何改变它,这样它会再次合作?

谢谢你的帮助。

Answer 1:

我的坏,这就是这么简单! WordPress使用两个占位符%s和%d。

%S应该字符串传递到数据库时,可以使用

而:

%d应该用于整数。

上面我的问题是,我已经把它们混合起来,我用字符串或%S为整数%d。 所以,问题是通过使用正确的占位符为你的特定数据类型的解决。 问题解决了。

例如,如果要查询使用ID与PHP变量$ id数据库,占位符应该是%d,因为它是整数,否则字符串,如姓名等使用%s



文章来源: How to convert this prepare statement to use placeholders in Wordpress $wpdb?
标签: mysql wpdb