Php 如何将多个通配符与$wpdb prepared语句一起使用?

Php 如何将多个通配符与$wpdb prepared语句一起使用?,php,mysql,wordpress,prepared-statement,Php,Mysql,Wordpress,Prepared Statement,我正在尝试动态构建一个准备好的语句,以便与Wordpress一起使用,目前只要一个字段有一个值,该语句就可以正常工作,但如果存在多个值,则无法返回结果。代码如下: $keywords = ($_POST['keywords']) ? 'post_title LIKE %s' : ''; $keywordsVal = (!empty($keywords)) ? $_POST['keywords'] : ''; $location = ($_POST['town']) ? 'post_city L

我正在尝试动态构建一个准备好的语句,以便与Wordpress一起使用,目前只要一个字段有一个值,该语句就可以正常工作,但如果存在多个值,则无法返回结果。代码如下:

$keywords = ($_POST['keywords']) ? 'post_title LIKE %s' : '';
$keywordsVal = (!empty($keywords)) ? $_POST['keywords'] : '';

$location = ($_POST['town']) ? 'post_city LIKE %s' : '';
$locationVal = (!empty($location)) ? $_POST['town'] : '';

$orgName = ($_POST['org_name']) ? 'post_title LIKE %s' : '';
$orgNameVal = (!empty($orgName)) ? $_POST['org_name'] : '';

$countyName = ($_POST['county']) ? 'post_region LIKE %s' : '';
$countyNameVal = (!empty($countyName)) ? $_POST['county'] : '';

$postcode = ($_POST['postcode']) ? 'post_zip LIKE %s' : '';
$postcodeVal = (!empty($postcode)) ? $_POST['postcode'] : '';

$queryArray = array($keywords => $keywordsVal, $location => $locationVal, $orgName => $orgNameVal, $countyName => $countyNameVal, $postcode => $postcodeVal);

$queryString = array();
$queryVals = array();
foreach($queryArray AS $string => $val) {
    if (!empty($string)) {
        $queryString[] = $string;
        $queryVals[] = '%'.$wpdb->esc_like($val).'%';
        }
    }

$groupStrings = implode(' AND ', $queryString);
$groupVals = implode(', ', $queryVals);

$searchQuery = $wpdb->get_results(
    $wpdb->prepare(
    "
    SELECT *
    FROM wp_geodir_gd_place_detail WHERE
    $groupStrings
    "
    ,$groupVals
    )
);
如果输入单个值,它将生成如下查询字符串:

SELECT * FROM wp_geodir_gd_place_detail WHERE post_city LIKE %s ,%london%
SELECT * FROM wp_geodir_gd_place_detail WHERE post_title LIKE %s AND post_city LIKE %s ,%sushi%, %london%
这项工作非常好,并按预期返回结果。但是,如果存在多个值,则它根本不起作用。例如,输入两个值时生成的代码如下所示:

SELECT * FROM wp_geodir_gd_place_detail WHERE post_city LIKE %s ,%london%
SELECT * FROM wp_geodir_gd_place_detail WHERE post_title LIKE %s AND post_city LIKE %s ,%sushi%, %london%
这无法返回结果,即使我手动执行该查询并直接在phpMyAdmin中运行它,如下所示:

SELECT * FROM wp_geodir_gd_place_detail WHERE post_title LIKE '%sushi%' AND post_city LIKE '%london%'

它按预期成功返回结果!我猜问题出在使用LIKE通配符和wpdb prepared语句时,但我不知道具体是什么。

在多值查询中是否有错误?没有,只是没有返回结果。在多值查询中是否有错误?没有,只是没有返回结果。