1

在 Wordpress 3.5 之前,我有一个完美运行的 wpdb prepare 语句。这是我的线:

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

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

谢谢你的帮助。

4

1 回答 1

5

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

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

尽管:

%d 应该用于整数。

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

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

于 2012-12-18T03:09:04.920 回答