0

我有 php 脚本,它从 JavaScript 搜索表单接收许多变量。问题是其中一些变量可能是空的,所以我必须在查询之前检查每个变量。例如:用户可以输入学生的姓名和身份证并将性别字段留空,那么我应该如何编写查询?我读过我可能需要使用 append 但我不知道该怎么做。还有其他更好的主意吗?

一段脚本:

$name = ($_GET['name']); 
$id = ($_GET['id']);
$gender = ($_GET['gender']);

 (!$con) {
    throw new Exception("Error in connection to DB");
     }

   $query ="SELECT grade FROM students  WHERE name ILIKE '%$name%' ";
   $result = pg_query($query); 

编辑

好吧,如果我使用空函数和 isset 函数,那么我必须检查每个变量并编写新查询?检查后如何更新原始查询?

4

4 回答 4

2

使用 PHP,您可以empty这样使用isset

if (!isset($_GET['name']) || empty($_GET['name'])) {
  // Error detection, this field isn't available
}

请注意,isset在此示例中实际上是多余的,empty如果未设置将返回 false。

可以在此处此处找到文档

于 2012-11-27T17:17:32.263 回答
0

空的 ( )

判断一个变量是否为空:

http://php.net/manual/en/function.empty.php

伊塞特 ( )

确定变量是否已设置且不为 NULL :

http://php.net/manual/en/function.isset.php

于 2012-11-27T17:17:04.893 回答
0

您可以像这样检查变量内容:

if (!empty($_GET['name'])) {
    // make your query
}
于 2012-11-27T17:17:58.997 回答
0

创造性思考。

<?php
$first = TRUE;
$var_names = array('name', 'age', 'gender');

$query = "SELECT * FROM table WHERE"

foreach( $_GET as $key => $value ) {
    if( in_array($key, $var_names) && !empty($_GET[$key]) ) {
        if( $first ) {
            $query .= sprintf(" %s = '%s'", $key, $value);
            $first = FALSE;
        } else {
            $query .= sprintf(" AND %s = '%s'", $key, $value);
        }
    }
}
if( $first ) { die('no parameters given, query will error out.'); }
echo $query;

这对于 SQL 注入也是非常不安全的,但我不打算在这里实现参数化查询。

于 2012-11-27T17:33:55.817 回答