php - PHP/MySQL 过滤我的数据时遇到问题
问题描述
我有一个类似于以下示例的数据集:
a, b, c
1, 4, 7
2, 5, 8
3, 6, 9
我想要做的是根据我之前选择的列过滤这些数据。例如:
在“a”列中,搜索 2。
我尝试为给定的列创建一个变量并将其附加到 WHERE MySQL 函数。
这是我的表格:
<form action="buscar.php" method="get">
<input type="text" name="search" placeholder="">
<select name="level">
<option value="">Select an option</option>
<option value="a">a</option>
<option value="b">b</option>
<option value="c">c</option>
</select>
<input type="submit" value="Procurar">
</form>
这是我的 PHP/MySQL 搜索代码:
$level = $_GET['level'];
$search = $_GET['search'];
$result_search = "SELECT * FROM insects WHERE '$level' LIKE '%$search%';
$resultado_search = mysqli_query($conexao, $result_search);
当我做类似的事情时:
$result_search = "SELECT * FROM insects WHERE a LIKE '%$search%';
或者
$result_search = "SELECT * FROM insects WHERE b LIKE '%$search%';
它搜索我要指示的列,这是我想要的,但是当我输入时:
$result_search = "SELECT * FROM insects WHERE '$level' LIKE '%$search%';
它什么也没显示。
最后,我想要的是用户能够搜索给定文本将用于搜索的列。
解决方案
你最后的输出是:
$result_search = "SELECT * FROM insects WHERE '$level' LIKE '%$search%';
在 SQL 中翻译为:
SELECT * FROM insects WHERE 'a' LIKE '%$search%
你想要实现的是:
SELECT * FROM insects WHERE a LIKE '%$search%
因此,您必须删除 $level 周围的引号,如下所示:
$result_search = "SELECT * FROM insects WHERE $level LIKE '%$search%';
我讨厌成为那个人,但你应该研究一下SQL INJECTION
推荐阅读
- docusignapi - 如何将外部 DocuSign 信封与 SpringCM 工作流合并?
- html - 向代码添加条件以在未显示项目时显示文本
- javascript - 为什么在迭代时省略了作为索引值的符号?
- javascript - React Native TouchableHighlight onPress 不起作用
- docker - 从容器化的 RSpec/Capybara 和 Selenium Chrome 访问文件下载
- reactjs - 在反应中处理全局事件
- java - 在 Spring Kafka 中是否需要 kafka 容器工厂?
- r - For 循环错误:替换的长度为零
- javascript - 根据其中的标记设置标记群集图标
- php - 如何在显示 mysql 表的函数中包含分页?