在使用global $wpdb时,对数据进行查询,举个栗子

<?php
global $wpdb;
$cidentityNo=$_POST['identityNo'];
$IsHave = $wpdb -> get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->postmeta where meta_key='key_price' and meta_value='100'"));
echo $IsHave;
?>

上面的代码输出后就会报Warning: Missing argument 2 for wpdb::prepare()的错误。

使用$wpdb->prepare是因为mysql语句中可能含有单引号双引号这样的字符,如果不加 处理直接送给mysql,可能会导致错误。于是这里通过一个prepare来对mysql语句进行预处理。prepare的语法是:

$sql = $wpdb->prepare( 'query' [, value_parameter, value_parameter ... ] );

在query中可以包含%d,%S,%f,分别表示后面参数的类型是整数,字符和浮点。所以我们将代码改成这样:

$IsHave = $wpdb -> get_var($wpdb->prepare("SELECT count(*) FROM $wpdb->postmeta where meta_key=%s and meta_value=%d",'key_price','100'));

以上问题解决。

参考资料:

https://stackoverflow.com/questions/13955416/warning-missing-argument-2-for-wpdbprepare

https://blog.csdn.net/jinyeweiyang/article/details/42123481