如何将此prepare语句转换为在Wordpress $ wpdb中使用占位符?

时间:2012-12-17 02:36:35

标签: mysql wpdb

我在Wordpress 3.5之前有一个完美的wpdb准备语句。这是我的路线:

$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));

但是,它不再从数据库中检索正确的信息。我的修改后的查询有问题吗?如何更改它以便再次工作?

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

我的坏,这很简单! Wordpress使用两个占位符%s和%d。

将字符串传递给数据库时应使用

%s

,同时:

%d应该用于整数。

我上面的问题是我把它们搞混了,我用%d代表字符串,%s代表整数。因此,通过为特定数据类型使用正确的占位符可以解决问题。问题解决了。

例如,如果您使用带有php变量$ id的id查询数据库,则占位符应为​​%d,因为它是整数,否则为字符串,例如名称等。使用%s。