如何在PHP的tasks.php中添加URL查询参数实现数据库过滤
整合搜索过滤功能到tasks.php的实现方案
要实现通过URL参数query过滤任务数据的功能,你需要修改原代码的SQL查询逻辑,同时必须使用预处理语句防止SQL注入,以下是修改后的完整代码:
<?php // 创建数据库连接 $con = mysqli_connect("test", "test", "test", "test"); // 检查连接是否成功 if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); exit; // 连接失败时终止脚本 } // 获取并清理URL中的query参数 $searchQuery = isset($_GET['query']) ? trim($_GET['query']) : ''; // 基础SQL语句 $sql = "SELECT * FROM `tasks`"; // 如果搜索参数不为空,添加WHERE条件 if (!empty($searchQuery)) { $sql .= " WHERE `Task_title` LIKE ? OR `task_description` LIKE ?"; } // 始终按date_added降序排序 $sql .= " ORDER BY `tasks`.`date_added` DESC"; // 预处理SQL语句(防止SQL注入) $stmt = mysqli_prepare($con, $sql); // 如果有搜索参数,绑定通配符匹配的参数 if (!empty($searchQuery)) { $likeParam = "%{$searchQuery}%"; // 绑定两个参数(对应两个LIKE条件) mysqli_stmt_bind_param($stmt, "ss", $likeParam, $likeParam); } // 执行查询 mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); // 处理查询结果 $resultArray = array(); if ($result) { while ($row = $result->fetch_object()) { $resultArray[] = $row; } } // 输出JSON结果 echo json_encode($resultArray, defined('JSON_INVALID_UTF8_IGNORE') ? JSON_INVALID_UTF8_IGNORE : 0); // 关闭连接和预处理语句 mysqli_stmt_close($stmt); mysqli_close($con); ?>
关键修改说明:
- 获取URL参数:通过
$_GET['query']获取搜索关键词,用trim()去除首尾空格,处理参数为空的情况。 - 动态构建SQL:仅当
query参数非空时,添加WHERE条件匹配标题或描述字段。 - 预处理语句:使用
mysqli_prepare和mysqli_stmt_bind_param绑定参数,避免直接拼接SQL字符串导致的注入风险,这是必须的安全措施。 - 通配符匹配:用
%包裹搜索关键词,实现模糊匹配(包含关键词的任意位置都能被匹配到)。 - 清理冗余代码:原代码中
$cValue相关的POST参数处理与当前需求无关,已移除。
使用方式:
- 访问
tasks.php:返回所有任务数据 - 访问
tasks.php?query=books:返回标题或描述包含books的任务数据
内容的提问来源于stack exchange,提问作者user19437536
相关产品推荐
相关产品推荐

