PostgreSQL搜索查询 - 检查空字段

时间:2012-12-08 09:48:51

标签: php postgresql

我正在尝试使用mutliple条件字段创建搜索系统。我的问题是如何处理空标准字段(由用户省略)。我需要检查变量是否为空以便实现AND条件。在我的情况下,姓氏是必需的,所以我只需要检查id名字和ID不是空字段:

$query ="SELECT first_name, last_name FROM students  WHERE last_name ILIKE '%$last_name%' ";


if(isset($_GET['$first_name']))
$condition[]="first_name ILIKE '%$first_name'";

if(isset($_GET['$ID']))
$condition[]="ID = '$ID'";



if(!empty($condition))
$query .= implode(' AND ',$condition);

$result = pg_query($query); 

这不起作用。

4 个答案:

答案 0 :(得分:1)

我认为你错过了AND

if(!empty($condition))   
    $query .= ' AND '.implode(' AND ',$condition);

答案 1 :(得分:1)

您从GET请求的变量可能是错误的,名称后面有一个$符号。

此外,您可以在执行查询之前打印查询,以查看格式是否格式正确。

试试这个并发布结果。

$query ="SELECT first_name, last_name FROM students WHERE last_name ILIKE '%$last_name%' ";

if(isset($_GET['$first_name']))
$condition[]="first_name ILIKE '%$first_name'";

if(isset($_GET['$ID']))
$condition[]="ID = '$ID'";


if(!empty($condition))
$query .= implode(' AND ',$condition);
echo $query; exit();
$result = pg_query($query); 

答案 2 :(得分:1)

逻辑应该有效,但似乎缺乏基本的PHP语法和原则。

我猜你有:

<input type='text' name='ID' />

<input type='text' name='$ID' />

因此,您应该使用$_GET['id']


接下来,似乎你指望registered globals在新版本的php中被弃用。

您应该使用:

$condition[]="ID = '" . $_GET['ID'] . "'";

You're not escaping income values,使用pg_escape_string()

$condition[]="ID = '" . pg_escape_string( $connection, $_GET['ID']) . "'";

您没有初始化$conditions数组,添加:

$conditions = array();

到脚本的开头


在构建最终查询时,您遗漏了AND

if( count( $conditions)){
    $query .= ' AND ' . implode( ' AND ', $conditions);
}

或者您可以将last_name添加到$conditions

$query ="SELECT first_name, last_name FROM students  WHERE ";
$conditions = array(
    "last_name ILIKE '%" . 
         pg_escape_string($connection, $_GET['last_name']) . 
         "%'"
);
// ...
$query .= implode( ' AND ', $conditions);

答案 3 :(得分:0)

看看Pomm's Where课程。它允许您轻松创建AND / OR标准并将它们与值绑定以逃避它们。通过这种方式,您可以使用多个选择列表并使用OR子句将它们连接起来,并使用AND将其与其他标准连接起来。