使用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
相关产品推荐
相关产品推荐

