You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP数据库关键词搜索及可选日期范围查询实现咨询

搞定PHP数据库搜索:关键词+可选时间范围(作业版)

嘿,作为PHP新手,能搞定作业里的搜索功能其实挺有成就感的!我给你梳理几个实用的步骤,完全贴合你的需求——先搞定多字段关键词搜索,再加上可选的时间范围过滤,咱暂时不考虑SQL注入这些安全问题,先把功能跑起来再说!

一、先搭前端搜索表单

首先得让用户能输入搜索内容和时间范围,写个简单的HTML表单就行:

<form method="GET" action="search.php">
  <div>
    <label>关键词搜索(姓名/医生/病症):</label>
    <input type="text" name="keyword" placeholder="输入关键词">
  </div>
  <div>
    <label>时间范围:</label>
    <input type="date" name="start_date">
    <span>至</span>
    <input type="date" name="end_date">
  </div>
  <button type="submit">搜索</button>
</form>

这里用GET方法是因为搜索请求适合用GET(方便用户收藏链接),当然用POST也没问题,看你作业要求。

二、后端实现关键词搜索

接下来在search.php里处理搜索逻辑:

  1. 先获取前端传过来的关键词参数
  2. 拼接SQL语句,用OR来匹配多个字段(比如name、doctor、symptom,你可以换成你数据库里的实际字段名)

示例代码:

// 连接数据库(换成你的数据库信息)
$conn = mysqli_connect('localhost', '用户名', '密码', '数据库名');

// 获取关键词,默认空字符串
$keyword = isset($_GET['keyword']) ? $_GET['keyword'] : '';

// 基础SQL,用1=1是为了方便后续拼接条件,不用纠结第一个条件要不要加AND
$sql = "SELECT * FROM 你的表名 WHERE 1=1";

// 如果关键词不为空,添加多字段模糊匹配条件
if (!empty($keyword)) {
  $sql .= " AND (name LIKE '%$keyword%' OR doctor LIKE '%$keyword%' OR symptom LIKE '%$keyword%')";
}

三、添加可选时间范围过滤

时间范围是可选的,所以要判断用户有没有输入开始/结束日期,再把条件拼到SQL里:

// 获取时间参数
$start_date = isset($_GET['start_date']) ? $_GET['start_date'] : '';
$end_date = isset($_GET['end_date']) ? $_GET['end_date'] : '';

// 添加时间范围条件(假设你的时间字段是`visit_date`,类型是DATE/DATETIME)
if (!empty($start_date) && !empty($end_date)) {
  $sql .= " AND visit_date BETWEEN '$start_date' AND '$end_date'";
} elseif (!empty($start_date)) {
  // 只填了开始时间,搜索大于等于该日期的记录
  $sql .= " AND visit_date >= '$start_date'";
} elseif (!empty($end_date)) {
  // 只填了结束时间,搜索小于等于该日期的记录
  $sql .= " AND visit_date <= '$end_date'";
}

注意:你的数据库时间字段格式要和前端传的一致(比如MySQL的DATE是YYYY-MM-DD,前端type="date"刚好就是这个格式,完美匹配)。

四、执行查询并输出结果

最后执行SQL,把结果展示出来:

// 执行查询
$result = mysqli_query($conn, $sql);

// 输出结果
if (mysqli_num_rows($result) > 0) {
  echo "<h3>搜索结果:</h3>";
  echo "<ul>";
  while ($row = mysqli_fetch_assoc($result)) {
    echo "<li>姓名:{$row['name']} | 医生:{$row['doctor']} | 病症:{$row['symptom']} | 就诊日期:{$row['visit_date']}</li>";
  }
  echo "</ul>";
} else {
  echo "没有找到匹配的记录";
}

// 关闭连接
mysqli_close($conn);

几个新手小提醒

  • 把代码里的用户名、密码、数据库名、你的表名、字段名(比如name、doctor这些)全部换成你自己的实际信息!
  • 如果你的时间字段是DATETIME类型(带时分秒),前端还是用type="date"也没问题,MySQL会自动把YYYY-MM-DD转换成YYYY-MM-DD 00:00:00来匹配。
  • 测试的时候可以先输关键词,再试试只填时间,或者两者都填,看看结果对不对。

内容的提问来源于stack exchange,提问作者Andy Terry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:47:44