gpt4 book ai didi

php - 带撇号的 PHP 查询中的搜索词

转载 作者:可可西里 更新时间:2023-11-01 08:06:35 25 4
gpt4 key购买 nike

我浏览了很多主题,但还没有找到任何有用的东西 - 或者也许有用,但我对 PHP/MySQL 还很陌生,所以也许我只是遗漏了一些东西。

我有一个页面,允许用户输入项目名称以在 (MySQL) 数据库中查找它。然后它生成一个结果表并显示这些结果,并将一些数据转换为链接。然后将链接的术语用作查询以搜索数据库的其他字段。

一切正常...除非其中一个搜索词包含撇号。显然我想防止注入(inject)问题,但我还需要使用撇号进行搜索。这是我的代码:

$query = mysql_real_escape_string($query);
$query = htmlspecialchars($query);
$queryentered = $query;
$query = strtolower($query);

这是传递给查询的 URL:

echo " from <a href='index.php?volume=".$results2['book']."' class='where'>"
.$results2['book']."</a>";

和查询:

$raw_results = mysql_query("SELECT * FROM $database1 WHERE $wh LIKE '%$query%'
ORDER BY displayname") or die(mysql_error());

我没有编码正确吗?当我运行搜索时,它显示“没有找到 [search term] 的结果”,我在其中得到任何撇号的\'。

最佳答案

这段代码的顺序完全错误:

$query = mysql_real_escape_string($query);
$query = htmlspecialchars($query);
$queryentered = $query;
$query = strtolower($query);

转义应该最后完成,就在数据库查询字符串连接之前。在这种情况下,它是无关紧要的,因为 strtolower 不会撤消转义。更严重的实际上是 HTML 转义,它不属于 SQL 上下文。不要覆盖您的主要变量,而是:

$queryentered = htmlspecialchars($query);
$query = strtolower($query);
$query = mysql_real_escape_string($query);

顺便说一句,繁琐的数据库转义很容易避免。查看PDO and prepared statements .

关于php - 带撇号的 PHP 查询中的搜索词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13337991/

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