Php 选择具有特定单词的行,如果未设置,则接受所有记录
在PHP端,由于从$\u POST收到的参数,我必须过滤我的查询。所以,如果设置了参数,查询必须过滤与参数相关的结果,否则,查询应该忽略该条件。我想做的是只写一个查询在两个不同的条件之间切换Php 选择具有特定单词的行,如果未设置,则接受所有记录,php,mysql,wordpress,Php,Mysql,Wordpress,在PHP端,由于从$\u POST收到的参数,我必须过滤我的查询。所以,如果设置了参数,查询必须过滤与参数相关的结果,否则,查询应该忽略该条件。我想做的是只写一个查询在两个不同的条件之间切换 $name = $_POST['name']!="" ? $_POST['name'] :"" ; $family = $_POST['family']!="" ? $_POST['family'] :"" ; $country = $_POST['country']!="" ? $_POST['count
$name = $_POST['name']!="" ? $_POST['name'] :"" ;
$family = $_POST['family']!="" ? $_POST['family'] :"" ;
$country = $_POST['country']!="" ? $_POST['country'] :"" ;
$where[1] = $name!="" ? 'name LIKE "%%s%%"' :TRUE ;
$where[2] = $family !="" ? 'family LIKE "%%s%%"' :TRUE ;
$where[3] = $country !="" ? 'country LIKE "%%s%%"' :TRUE ;
$sql = "SELECT *
FROM {$tbl}
WHERE {$where[1]} AND {$where[2]} AND {$where[3]} AND
soft_delete IS NULL OR soft_delete < 1
";
$query = $wpdb->prepare($sql, $name, $family, $country);
$results = $wpdb->get_results($query);
我想要的是,如果没有设置其中一个参数,则query没有过滤查询。例如,如果只设置了$name,则根据name字段和其他条件查询筛选记录必须为true您似乎需要这样的条件:
$sql = "SELECT *
FROM {$tbl}
WHERE ";
if (!$where[1] && !$where[2] && !$where[3]) {
$sql .= "{$where[1]} AND {$where[2]} AND {$where[3]} AND";
}
$sql .= " soft_delete IS NULL OR soft_delete < 1";
您可以创建一组准备好的语句,并根据传入请求中定义的查询参数选择合适的语句。@TimBiegeleisen,是的,这是基本解决方案。我的问题是当我将参数发送到wpdb->prepare时,它返回$results,而没有记录