如何通过点击国家菜单实现Datatables带条件数据查询
实现步骤
1. 修改导航链接传递国家参数
给每个国家的导航链接加上GET参数country,点击后将选中的国家传递给后端:
<nav style="margin-bottom:20px"> <a href="test.php">Home</a> | <a href="test.php?country=Japan">Japan</a> | <a href="test.php?country=Australia">Australia</a> | <a href="test.php?country=Kore">Kore</a> | <a href="test.php?country=Denmark">Denmark</a> | <a href="test.php?country=Swedia">Swedia</a> </nav>
2. 后端动态生成安全SQL查询
接收前端传递的country参数,拼接查询条件,这里加入白名单校验和预处理语句,避免SQL注入风险:
// 基础SQL语句,默认查询全表 $sql = "SELECT * FROM mydata"; $bindParams = []; $allowedCountries = ['Japan', 'Australia', 'Kore', 'Denmark', 'Swedia']; // 校验参数合法性后拼接查询条件 if (isset($_GET['country']) && in_array($_GET['country'], $allowedCountries)) { $sql .= " WHERE country = ?"; $bindParams[] = $_GET['country']; } // PDO 执行查询示例 $pdo = new PDO('mysql:host=你的数据库地址;dbname=你的库名;charset=utf8', '账号', '密码'); $stmt = $pdo->prepare($sql); $stmt->execute($bindParams); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // 若使用MySQLi可参考以下代码 // $conn = new mysqli('数据库地址', '账号', '密码', '库名'); // $stmt = $conn->prepare($sql); // if (!empty($bindParams)) { // $stmt->bind_param('s', ...$bindParams); // } // $stmt->execute(); // $result = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
3. 适配Datatables渲染
如果是前端静态加载Datatables,直接将查询结果转为JSON传入配置即可:
$('#yourTableId').DataTable({ data: <?php echo json_encode($result); ?>, // 保留你原有的columns等配置 columns: [ {data: '字段名1'}, {data: '字段名2'}, // 其余字段按原有需求配置 ] });
如果使用Datatables服务端渲染模式,只需将country参数加入ajax请求的传参列表,SQL逻辑无需修改。
内容的提问来源于stack exchange,提问作者Master Data
相关产品推荐
相关产品推荐

