我在执行准备好的SQL查询的wordpress中遇到问题。我有一个记录汽车制造商的数据库。
用户可以选择他们要搜索数据库的汽车制造商,它将返回结果。
用户可以选择以下选项,他们只能选择BMW,AUDI,OPEL和ALL中的一个选项。
如果选择全部,它将返回数据库中所有汽车制造商的结果。
以下代码可以正常工作,因为用户选择了BMW,AUDI,OPEL,但是如果用户选择ALL,则无法返回任何结果。
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 );
SELECT * FROM database_cars WHERE carModel = %s or 'All' = %s
这将导致or
的后半部分评估为True
并返回所有行。
//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 );
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
)
);
}
可能是一种更简洁的方法,但是我只是根据我所了解的很少的语法来尝试将这种方法的想法拼凑起来。