【发布时间】:2011-11-18 11:05:39
【问题描述】:
我有一个用户界面,用户可以在其中输入一个人的名字和姓氏。 只要我在搜索框中不输入任何内容,就不会找到任何用户。但是,只要我输入一个空格,就会返回数据库中的每个用户。我修剪输入字符串并检查空格:
if (isset($_GET['lastname'])) {
$lastname_value = trim($_GET['lastname']);
//This Line is only used for setting the Text again in the Search Box
$tpl->setVariable('ss-search-lastname-value', $lastname_value);
}
if(isset($_GET['firstname'])) {
$firstname_value = trim($_GET['firstname']);
$tpl->setVariable('ss-search-firstname-value',$firstname_value);
}
之后我编写了搜索查询:
$sql = "SELECT e.`user_id`, e.`firstname`, e.`lastname`, e.`email`
FROM `employees` as e
WHERE 1";
if($lastname_value!="") {
$sql .=" AND e.`lastname` ='$lastname_value'";
}
if($firstname_value!="") {
$sql .=" AND e.`firstname` ='$firstname_value'";
}
正常搜索会返回具有正确名字和姓氏的预期用户,如果我不输入任何内容并开始搜索,则不会返回任何结果。然而,搜索框中的一个空格,我得到了所有用户。我该如何解决?
【问题讨论】:
-
我认为正确的方法是不要将 SQL 组合为字符串,因为您容易受到注入攻击。用参数重做,也许你就不会再有问题了。