使用php清理搜索查询
发布时间:2020-12-13 21:39:09 所属栏目:PHP教程 来源:网络整理
导读:当用户在我的网站上搜索时,我会获取get请求并对其进行 mysql查询.我的原始代码看起来像这样:$q = $_GET [‘q’];. 现在urldecode正在为我添加斜杠,但我决定尝试使用santize字符串过滤器过滤器. 当我使用$q = urldecode($_ GET [‘q’]);时,这是我的sql: SE
当用户在我的网站上搜索时,我会获取get请求并对其进行
mysql查询.我的原始代码看起来像这样:$q = $_GET [‘q’];.
现在urldecode正在为我添加斜杠,但我决定尝试使用santize字符串过滤器过滤器. 当我使用$q = urldecode($_ GET [‘q’]);时,这是我的sql: SELECT * FROM item WHERE title LIKE '%you're%' OR description LIKE '%you're%' ORDER BY date DESC 当我使用时,这是我的sql:q = filter_var(urldecode($_ GET [‘q’]),FILTER_SANITIZE_STRING); SELECT * FROM item WHERE title LIKE '%you're%' OR description LIKE '%you're%' ORDER BY date DESC sql是完全一样的,但我得到不同的结果,我不知道为什么?只是使用urldecode从数据库返回正确的结果,但filter_var什么都不返回(即使sql是相同的). 我想我的问题是,清理和搜索查询字符串的最佳方法是什么? 解决方法
Urldecode是使用错误的函数 – PHP将自动解码$_GET中的任何变量,因此您不需要和
PHP Manual says doing so is dangerous一样.
人们经常谈论消毒输入,但我更愿意考虑消毒输出. 例如,清理输入将是: $q = urldecode($_GET['q']); $sql = "SELECT * FROM item WHERE title LIKE '%{$q}%'" // later echo "These items match '$q'"; 消毒产量: $sql = "SELECT * FROM item WHERE title LIKE '%".mysql_real_escape_string($_GET['q'])."%'" // later echo "These items match '".htmlspecialchars($_GET['q']).'"; 请注意,在后一个示例中,我使用了不同的函数 – 一个用于将数据转换为mysql安全格式,另一个用于将数据转换为HTML安全格式.在知道对数据执行的操作之前,您无法知道要运行哪个函数. 其他人提到了参数化查询.是的,这些都是尽可能安全,避免意外错误,但不容易在一夜之间切换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |