gpt4 book ai didi

php - php搜索mysql数据库的一些问题

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

所以我的这个网站有一个搜索功能,可以在我的 mysql 数据库中搜索一个表。目前数据库有 1108 行。它包含音乐信息,例如艺术家和专辑。由于每个角色都可能出现在艺术家姓名或专辑名称中,因此我在将这些变量添加到数据库之前对每个变量进行了 urlencode。见下文:

$artist = urlencode($_POST['artist']);
$album = urlencode($_POST['album']);

现在让我们假装我已经向数据库添加了一个新条目并且它包含需要进行 urlencoded 的字符。数据库显示一切正常。

现在我想去搜索。

外来字符起作用了。你可以在这里看到:http://albumarrrt.net/details.php?artist=Ai%20Otsuka单击每个作品的相册链接。

但是现在出现了一些问题。

1 - 如果您搜索“&”,搜索将 %26 读取为空。它在地址栏中显示 %26,但它读为空。这是它的阅读方式:

$search = $_GET['search'];

if($search == '') {
echo "Please enter a search term :(";
}

这是 $search 在开始被数据库读取之前所做的唯一事情。

2 - 如果您搜索单引号或双引号,它会执行一些奇怪的操作示例:

Search for " and get No matches found for "%5C%5C%26quot%3B" Search for ' and get No matches found for "%5C%5C%26%23039%3B"

我不明白为什么要这样做,因为数据库只包含报价的代码,没有其他内容。

这是我在搜索中发现的仅有的两处错误。也许我只是看它太久了,无法弄明白,但我很困惑为什么它不读作“&”。


关于我的最后一个问题。我当前的搜索方法将每个单词分开并在其周围添加 %,然后使用 LIKE 语句查找匹配项。示例:

搜索:一堆东西(单词)mysql 查询将是这样的:

SELECT * FROM TABLE WHERE (album LIKE '%A%' AND album LIKE '%bunch%' AND album LIKE '%of%' AND album LIKE '%Stuff%' AND album LIKE '%%28word%29%') OR (artist LIKE '%A%' AND artist LIKE '%bunch%' AND artist LIKE '%of%' AND artist LIKE '%Stuff%' AND artist LIKE '%%28word%29%')

显然这会给服务器带来很大的压力,而且我知道使用 LIKE 语句进行如此大的数据库搜索是个坏主意,那么搜索 FUL​​L TEXT 或其他方法的替代方法是什么?

很抱歉问了太多问题,但这些问题都是相互关联的。


编辑:好的,我已经修复了我的数据库,但仍有一些问题。有人建议将我的文本从 utf8 转换为纯 utf,我该怎么做?

我仍然遇到 & 符号的问题。例如:如果你在谷歌上搜索 & 它有效,但是在我的网站上,我的搜索查询的 POST 结果在搜索 & 时没有显示任何内容。

最佳答案

  • 首先:不要对数据库中的数据进行 urlencode。当您输出 为 HTML 时,获取数据后对数据进行 Urlencode。

  • 其次:在 SQL 查询中使用用户提供的值时,一定要使用查询参数。这样您就不必担心表单数据中的引号会导致语法错误或 SQL 注入(inject)风险。

  • 第三:不要使用LIKE '%pattern%' hack;而是使用真正的全文搜索解决方案(FULLTEXTLucene/SolrSphinx Search )。它的性能将比使用临时文本搜索(取决于您的数据量)好数百或数千倍。

    请参阅我为 MySQL 大学所做的演示:Practical Full Text Search in MySQL .

关于php - php搜索mysql数据库的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045961/

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