PHP查询脚本 - 在查询之前检查空变量

时间:2012-11-27 17:14:16

标签: php database

我有php脚本,它从JavaScript搜索表单接收许多变量。事情是这些变量中的一些可能是空的,所以我必须在查询之前检查每个变量。例如:用户可以输入学生的姓名和ID,并将性别字段留空,那么我应该如何编写查询?我读过我可能需要使用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); 

修改

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

4 个答案:

答案 0 :(得分:2)

使用PHP,您可以使用emptyisset

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

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

可以找到文档herehere

答案 1 :(得分:0)

空()

确定变量是否为空:

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

isset()

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

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

答案 2 :(得分:0)

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

if (!empty($_GET['name'])) {
    // make your query
}

答案 3 :(得分: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注入来说,这也非常不安全,但我不会在这里实现参数化查询。