0

我正在尝试使用多个条件字段创建搜索系统。我的问题是如何处理空标准字段(用户省略)。我需要检查变量是否为空以实现 AND 条件。就我而言,姓氏是必需的,所以我只需要检查 id first name 和 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

4 回答 4

1

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

我猜你有:

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

不是

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

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


接下来,您似乎在指望已在新版本的 php.ini 中弃用的已注册全局变量。

你应该使用:

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

您没有逃避收入价值,请使用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);
于 2012-12-08T09:59:26.327 回答
1

我想你错过了一个AND

if(!empty($condition))   
    $query .= ' AND '.implode(' AND ',$condition);
于 2012-12-08T09:56:51.380 回答
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); 
于 2012-12-08T09:57:40.100 回答
0

看看Pomm 的 Where课程。它允许您轻松创建 AND / OR 标准并将它们与值绑定以转义它们。这样,您可以使用多个选择列表并使用 OR 子句将它们连接起来,并使用 AND 将它们与其他条件连接起来。

于 2012-12-11T12:58:14.763 回答