首页 > 解决方案 > 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%';

它什么也没显示。

最后,我想要的是用户能够搜索给定文本将用于搜索的列。

标签: phpmysqlfilter

解决方案


你最后的输出是:

$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


推荐阅读