我有一个搜索功能,可让您输入最后,第一和中间名称的不同类型框。我对代码没有任何问题,但有人知道如何优化它吗?
代码有多个if语句,可以找出哪个文本框是空的,然后在WHERE中使用,如下所示:
$where1 = $_POST['firstname'];
$where2 = $_POST['midname'];
$where3 = $_POST['lastname'];
if(!empty($where1) && empty($where2) && empty($where3)){
$result = $connection->query("SELECT * FROM senior WHERE firstname = '$where1'");
} else if(!empty($where1) && !empty($where2) && empty($where3)){
$result = $connection->query("SELECT * FROM senior WHERE firstname = '$where1' AND midname = '$where2'");
} else if(!empty($where1) && !empty($where2) && !empty($where3)){
$result = $connection->query("SELECT * FROM senior WHERE firstname = '$where1' AND midname = '$where2' AND lastname = '$where3' ");
} else if(!empty($where1) && empty($where2) && !empty($where3)){
$result = $connection->query("SELECT * FROM senior WHERE firstname = '$where1' AND lastname = '$where3' ");
} else if(empty($where1) && !empty($where2) && !empty($where3)){
$result = $connection->query("SELECT * FROM senior WHERE lastname = '$where3' AND midname = '$where2' ");
} else if(empty($where1) && !empty($where2) && empty($where3)){
$result = $connection->query("SELECT * FROM senior WHERE midname = '$where2'");
} else if(empty($where1) && empty($where2) && !empty($where3)){
$result = $connection->query("SELECT * FROM senior WHERE lastname = '$where3'");
}
答案 0 :(得分:0)
我的建议
$where = '';
if($where1) $where .= ($where ? " AND " : " ")."firstname = '$where1'";
if($where2) $where .= ($where ? " AND " : " ")."midname = '$where2'";
if($where3) $where .= ($where ? " AND " : " ")."lastname = '$where3'";
$query = "SELECT * FROM senior".($where ? " WHERE ".$where : "");
$result = $connection->query($query);
答案 1 :(得分:0)
首先,我建议您使用Prepared Statements以提高安全性。
与您在上面编写的代码相关,您可以尝试这样的事情:
$query = "SELECT * FROM senior";
$firstcondition = true;
if (!empty($where1))
addConditon($query, "firstname = ".$where1);
if (!empty($where2))
addConditon($query, "midname = ".$where2);
if (!empty($where3))
addConditon($query, "lastname = ".$where3);
$result = $connection->query($query);
function addCondition($query, $condition) {
if (!$firstcondition)
$query.= " AND ";
else {
$firstcondition = false;
$query.= " WHERE ";
}
$query.= $condition;
}
答案 2 :(得分:0)
只是一个建议:为什么不使用LIKE
,因为它是一个搜索查询?
$where1 = $_POST['firstname'];
$where2 = $_POST['midname'];
$where3 = $_POST['lastname'];
$result = $connection->query("SELECT * FROM senior WHERE firstname LIKE '%".$where1."%' AND midname LIKE '%".$where2."%' AND lastname LIKE '%".$where3."%' ");