Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择具有特定单词的行,如果未设置,则接受所有记录_Php_Mysql_Wordpress - Fatal编程技术网

Php 选择具有特定单词的行,如果未设置,则接受所有记录

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

在PHP端,由于从$\u POST收到的参数,我必须过滤我的查询。所以,如果设置了参数,查询必须过滤与参数相关的结果,否则,查询应该忽略该条件。我想做的是只写一个查询在两个不同的条件之间切换

$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,而没有记录