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

使用PHP从MySQL查询指定数据:按输入格式匹配ID或姓名字段搜索

实现方案

核心逻辑说明

  • 先用正则校验输入是否符合ID格式:匹配规则为^KM\d{5}$,KM固定前缀+5位数字,总长度刚好7位,匹配成功则查询ID列,否则查询names列
  • 原代码直接拼接SQL存在SQL注入高危风险,必须使用预处理语句规避安全问题

完整修正代码

if(isset($_POST['find'])) {
    $find = trim($_POST['find']);
    // 校验是否符合ID格式规则
    $isIdFormat = preg_match('/^KM\d{5}$/', $find);
    
    if ($isIdFormat) {
        // 符合ID格式,查询ID列,需要模糊匹配可把=改为LIKE,对应$find拼接%即可
        $stmt = mysqli_prepare($condb, "SELECT * FROM students WHERE id = ?");
    } else {
        // 不符合格式,查询names列,默认用模糊搜索,需要精确匹配把LIKE改为=即可
        $stmt = mysqli_prepare($condb, "SELECT * FROM students WHERE names LIKE ?");
        $find = "%{$find}%";
    }
    
    // 绑定参数执行查询
    mysqli_stmt_bind_param($stmt, "s", $find);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    // 遍历获取所有匹配结果
    while ($query = mysqli_fetch_array($result)) {
        // 此处写结果处理逻辑
        // var_dump($query);
    }
    // 释放预处理语句
    mysqli_stmt_close($stmt);
}

补充说明

如果ID查询需要支持模糊匹配,把ID查询的条件改为id LIKE ?,同时给$find前后拼接百分号即可;姓名搜索的模糊匹配规则也可根据业务调整,比如仅匹配姓名开头就改成$find = "{$find}%"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:27:01