我有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函数,那么我必须检查每个变量并编写新查询?检查后如何更新原始查询?
答案 0 :(得分:2)
使用PHP,您可以使用empty
和isset
:
if (!isset($_GET['name']) || empty($_GET['name'])) {
// Error detection, this field isn't available
}
请注意,isset
在此示例中实际上是多余的,因为empty
如果未设置则会返回false。
答案 1 :(得分:0)
答案 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注入来说,这也非常不安全,但我不会在这里实现参数化查询。