Wordpress PHP 准备好 SQL 使用通配符查询

Wordpress PHP Prepared SQL Query with Wildcard

我在 wordpress 执行准备好的 SQL 查询时遇到问题。我有一个记录汽车制造商的数据库。

用户可以选择他们想要在数据库中搜索的汽车制造商,它将 return 结果。

用户有以下选项select,他们可以select只有一个选项BMW、AUDI、OPEL、ALL。

如果他们选择全部,则数据库中所有汽车制造商的结果应该return。

下面的代码在用户 selects BMW、AUDI、OPEL 中工作正常,但如果用户 selects ALL,则无法 return 任何结果。

PHP 代码

//user has a dropdown where they can choose either BMW, AUDI, OPEL, ALL

$chosenCarManufacturer = "ALL";

$results =  $wpdb->get_results( 
    $wpdb->prepare( "
          SELECT * FROM database_cars 
          WHERE carModel = %s",  
        $chosenCarManufacturer 
    ) 
);

print_r( $results );

我怀疑问题是 "ALL" 没有 carModel

正如我在评论中所建议的那样,如果选择 "ALL",只需编写省略 WHERE 子句的逻辑即可。

我从来没有写过很多东西PHP,但是像这样的东西应该可以,不是吗?

if($chosenCarManufacturer == 'ALL') {
    $results =  $wpdb->get_results(
       //just a literal query since there are no parameters 
       $wpdb->query("SELECT * FROM database_cars");
    )
} else {
    $results =  $wpdb->get_results(
       //use a prepared statement with parameters/placeholders
       $wpdb->prepare("SELECT * FROM database_cars WHERE carModel = %s",  
          $chosenCarManufacturer
       ) 
    );
}

可能有更简洁的方法,但我只是试图根据我所知道的一点点语法拼凑出该方法的想法。

感谢 Austin 提供的解决方案。我使用了您建议的 OR 条件,并为 2 个占位符将相同的字符串传递给 prepare 方法两次。最终工作代码如下:

//user has a dropdown where they can choose either BMW, ``AUDI, OPEL, ALL

$chosenCarManufacturer = "ALL";

$results =  $wpdb->get_results( 
    $wpdb->prepare( "
          SELECT * FROM database_cars 
          WHERE carModel = %s or 'All' = %s",  
        $chosenCarManufacturer,
        $chosenCarManufacturer 
    ) 
);

print_r( $results );