[英]PHP multiple search query returns all rows
问题是我正在尝试获取特定的搜索结果,但是它给出了所有数据库行,而不是过滤后的结果。 我如何避免这种情况?
require_once 'db/connect.php';
if(isset($_GET['submit'])){
$doctor = $db->escape_string($_GET['doctor']);
$specialization = $db->escape_string($_GET['specialization']);
$hospital = $db->escape_string($_GET['hospital']);
$query = $db->query("
SELECT docname, specialization,hospital
From doctor
WHere docname Like '%{$doctor}%' or
specialization like '%{$specialization}%' or
hospital like '%{$hospital}%'
");
?>
<div class="result-count">
Found <?php echo $query->num_rows; ?> results.
</div>
<?php
if($query -> num_rows){
while($r = $query->fetch_object()){
?>
<div class="result-count">
<a href="#"><?php echo $r->docname; ?></a>
</div>
<?php
}
}
}
您必须从WHERE子句中删除未使用的字段。 否则, hospital like '%%'
条件将有效地匹配表中的每一行。
因此,在您的情况下,您应该动态创建查询,仅为非空字段添加条件。
当然 , 将结果查询打印出来非常有帮助。 它不仅可以让您了解正在运行的SQL,还可以使您的问题变得更明智。
尝试这个:
require_once 'db/connect.php';
if(isset($_GET['submit'])){
$doctor = $db->escape_string($_GET['doctor']);
$specialization = $db->escape_string($_GET['specialization']);
$hospital = $db->escape_string($_GET['hospital']);
$where = array();
if (!empty($doctor)) {
array_push($where, "docname like '%{$doctor}%'");
}
if (!empty($specialization)) {
array_push($where, "specialization like '%{$specialization}%'");
}
if (!empty($hospital)) {
array_push($where, "hospital like '%{$hospital}%'");
}
$sql = "SELECT docname, specialization, hospital "
. "FROM doctor";
if (!empty($where)) {
$sql .= "WHERE " . implode(' OR ', $where);
}
$query = $db->query($sql);
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.