我正在尝试使用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);
这不起作用。
答案 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将其与其他标准连接起来。