pg_query_params 查询空值
pg_query_params query for null values
我有这个查询 returns 匹配的行。我需要忽略变量为 null ex 的条件。 :
如果 $data[0] 为空,它将变为
$parameters = array ($data[1], $data[2]);
$result = pg_query_params(connect(), 'SELECT * FROM person WHERE surname= and status=', $parameters);
如果 $data[0] 和 $data[2] 为空,它将变为:
$parameters = array ($data[1]);
$result = pg_query_params(connect(), 'SELECT * FROM person WHERE surname= ', $parameters);
等等...
这是当前查询:
$parameters = array ($data[0], $data[1], $data[2]);
$result = pg_query_params(connect(), 'SELECT * FROM person WHERE name = and surname= and status=', $parameters);
我阅读了有关 coalesce() 的内容,但不知道如何包含参数 $1、$2、$3。
这是一个经典问题:使用从一组可选条件中过滤的 WHERE 子句构建查询。以下是您可以如何以相当通用的方式实施,以适应任意列组合。
首先需要将输入参数连接到 PHP 中的列名称,以便您可以通过编程方式对它们进行寻址。我们可以为此使用关联数组:
$columns = array("name"=>$data[0], "surname"=>$data[1], ...etc...);
然后遍历它们以生成(到数组中)非空输入的每个单独的相等性测试(colname=$N
):
$clauses = array();
$non_null_params = array();
$param_index=1;
foreach ($columns as $name=>$value) {
if ($value !== null) {
$clauses[] = "$name=${$param_index}";
$param_index++;
$non_null_params[] = $value;
}
}
如果根本没有结果子句,则要么没有 WHERE 过滤,要么您希望生成错误,具体取决于要求。
if (empty($clauses)) {
$where_clause = ""; // or error out?
}
否则将单独的 colname=$N
子句粘合到一个查询片段中:
$where_clause = "WHERE " . implode(" AND ", $clauses);
最终 运行 具有一组非空参数的动态查询:
pg_query_params("SELECT some_columns $where_clause", $non_null_params);
我有这个查询 returns 匹配的行。我需要忽略变量为 null ex 的条件。 :
如果 $data[0] 为空,它将变为
$parameters = array ($data[1], $data[2]);
$result = pg_query_params(connect(), 'SELECT * FROM person WHERE surname= and status=', $parameters);
如果 $data[0] 和 $data[2] 为空,它将变为:
$parameters = array ($data[1]);
$result = pg_query_params(connect(), 'SELECT * FROM person WHERE surname= ', $parameters);
等等...
这是当前查询:
$parameters = array ($data[0], $data[1], $data[2]);
$result = pg_query_params(connect(), 'SELECT * FROM person WHERE name = and surname= and status=', $parameters);
我阅读了有关 coalesce() 的内容,但不知道如何包含参数 $1、$2、$3。
这是一个经典问题:使用从一组可选条件中过滤的 WHERE 子句构建查询。以下是您可以如何以相当通用的方式实施,以适应任意列组合。
首先需要将输入参数连接到 PHP 中的列名称,以便您可以通过编程方式对它们进行寻址。我们可以为此使用关联数组:
$columns = array("name"=>$data[0], "surname"=>$data[1], ...etc...);
然后遍历它们以生成(到数组中)非空输入的每个单独的相等性测试(colname=$N
):
$clauses = array();
$non_null_params = array();
$param_index=1;
foreach ($columns as $name=>$value) {
if ($value !== null) {
$clauses[] = "$name=${$param_index}";
$param_index++;
$non_null_params[] = $value;
}
}
如果根本没有结果子句,则要么没有 WHERE 过滤,要么您希望生成错误,具体取决于要求。
if (empty($clauses)) {
$where_clause = ""; // or error out?
}
否则将单独的 colname=$N
子句粘合到一个查询片段中:
$where_clause = "WHERE " . implode(" AND ", $clauses);
最终 运行 具有一组非空参数的动态查询:
pg_query_params("SELECT some_columns $where_clause", $non_null_params);