使用php清理搜索查询

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了使用php清理搜索查询脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
用户在我的网站上搜索时,我会获取get请求并对其进行 mysql查询.我的原始@L_304_5@看起来像这样:$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安全格式.在知道对数据执行的操作之前,您无法知道要运行哪个函数.

其他人提到了参数化查询.是的,这些都是尽可能安全,避免意外错误,但不容易在一夜之间切换.

脚本宝典总结

以上是脚本宝典为你收集整理的使用php清理搜索查询全部内容,希望文章能够帮你解决使用php清理搜索查询所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。