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

Eme*_*ngo 1 mysql wordpress

我在 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'"));
Run Code Online (Sandbox Code Playgroud)

现在,在 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));
Run Code Online (Sandbox Code Playgroud)

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

感谢您的帮助。

Eme*_*ngo 5

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

将字符串传递到数据库时应使用 %s

尽管:

%d 应该用于整数。

我上面的问题是我把它们混合在一起,我使用 %d 表示字符串或 %s 表示整数。因此,通过为您的特定数据类型使用正确的占位符即可解决问题。问题解决了。

例如,如果您使用 id 和 php 变量 $id 查询数据库,则占位符应该是 %d,因为它是整数,否则对于字符串(例如名称等),请使用 %s。