gpt4 book ai didi

php - 在 where 子句中将经过净化的输入作为列名传递

转载 作者:行者123 更新时间:2023-11-29 04:07:30 25 4
gpt4 key购买 nike

我有一个接受 $filter 参数的函数,然后根据参数中的过滤器从 SQL 表中提取数据。起初我尝试重载该函数,以便一个函数采用单个 $filter 变量,而另一个函数采用用于多个过滤器的数组。但后来,我开始想知道如何清理过滤器标签。

这可能令人困惑,所以这里有一些例子。例如,用户在搜索框中键入以显示名称为 John 的所有用户。因此,$filter_tag 将设置为“name”,而 $filter 将设置为“John”。我的 PDO 查询看起来像这样:

$query = "SELECT `name` FROM `users` WHERE ";
$query .= $filter_tag." = ?";

问题是 $filter_tag 没有被清理。如果我对它进行清理并且变量被转义,那么查询将不起作用。也许我把它变得比它需要的更复杂,并且有一些简单的解决方案。

如果您不明白我要问的问题,请发表评论。

最佳答案

您可以创建有效标签的白名单:

if (in_array($filter_tag, ['name', ...], true)) {
$query .= $filter_tag . = '?';
}

或者您可以删除所有无效字符,但我更喜欢白名单方法,因为只有那么多有效列名:)

最后,如果给定的标签没有出现在白名单中,您也可以改变条件并引发错误,而不是上面的代码。在某些情况下,这可能是更好的方法,否则您稍后可能会收到错误,因为传递给 ->execute() 的参数数量应与查询中占位符的数量相匹配。

关于php - 在 where 子句中将经过净化的输入作为列名传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27164511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com