我正在尝试分别进行此搜索/部分搜索和下拉菜单搜索。例如,当我使用下拉菜单搜索时,输入搜索栏将为空,仅显示下拉菜单搜索栏的结果。当我只进行部分搜索时,我的代码运行良好,但是每当我使用下拉菜单搜索时,并且如果输入栏为空,它只会显示数据库中的所有结果。有解决方法吗?谢谢:)我已经试过弄乱%符号,但是它仍然无法按照我想要的方式工作。
if(isset($_POST['submit'])){
$search = $db->real_escape_string($_POST['search']);
$category = $_POST['category'];
$resultSet = $db->query("SELECT * FROM books WHERE booktitle LIKE '%$search%' OR category = '$category'");
echo "<table border='1'>";
echo "<th>Author</th><th>Book Title</th><th>Reserved</th>";
if($resultSet->num_rows > 0){
while($rows = $resultSet->fetch_assoc()){
$au = $rows['author'];
$bt = $rows['booktitle'];
$rev = $rows['reserved'];
echo"<tr><td>$au</td><td>$bt</td><td>$rev</td></tr>\n";
}
echo"</table>";
}
您的问题是,如果搜索为空白,则WHERE部分显示为“ WHERE booktitle like'%%',实际上每一行都会匹配。
您可以这样调整:
if(isset($_POST['submit'])){
$search = $db->real_escape_string($_POST['search']);
if ($search != "") {
$search = "%" . $search . "%";
}
$category = $_POST['category'];
$resultSet = $db->query("SELECT * FROM books WHERE booktitle LIKE '$search' OR category = '$category'");
echo "<table border='1'>";
echo "<th>Author</th><th>Book Title</th><th>Reserved</th>";
if($resultSet->num_rows > 0){
while($rows = $resultSet->fetch_assoc()){
$au = $rows['author'];
$bt = $rows['booktitle'];
$rev = $rows['reserved'];
echo"<tr><td>$au</td><td>$bt</td><td>$rev</td></tr>\n";
}
echo"</table>";
}
}
这基本上使LIKE语句仅在必要时包含%运算符。这不是一个完美的解决方案,但应该可以完成工作。