所以我有这个网站有一个搜索功能,它在我的mysql数据库中搜索一个表。目前数据库有1108行。它包含音乐信息,如艺术家和专辑。由于每个角色都可能是艺术家姓名或专辑名称,因此我在将每个变量添加到数据库之前都已对其进行了urlen编码。请看下图:通过php搜索mysql数据库的一些问题
$artist = urlencode($_POST['artist']);
$album = urlencode($_POST['album']);
所以,现在让假装我添加了一个新条目的数据库,它包含了需要进行url编码字符。数据库显示它很好。
现在我想去搜索。
工作的外国字符。你可以在这里看到:http://albumarrrt.net/details.php?artist=Ai%20Otsuka点击每个作品的专辑链接。
但是现在出现了一些问题。
1 - 如果搜索'&',则搜索将%26读为无。它在地址栏中显示%26,但它没有任何内容。 这里是它是如何被读取:
$search = $_GET['search'];
if($search == '') {
echo "Please enter a search term :(";
}
这是$搜索做的唯一的事情之前,它开始变得由数据库中读取。
2 - 如果你搜索一个单或双引号,但它确实有些怪异的东西,例如:
搜索“并获得未找到匹配 为‘%5C%5C%26quot%3B’搜索对于“ 并获得找不到相符的 ‘%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%')
显然,这是放了很多应变的服务器上,我知道使用像这样的语句大型数据库搜索是一个坏主意,那么搜索全文或其他方法的替代方法是什么?
对不起,这些问题的数量非常多,但它们都是各自携手并进的。
编辑: 好,我定我的数据库,但仍然有几个问题。 有人建议将我的文本从utf8转换为普通的utf,我该怎么做?
和我仍然遇到了&标志的问题。 例如: 如果您在谷歌上搜索&,但在我的网站上,搜索查询的POST结果在搜索&时不会显示任何内容。
您的应用程序已经成熟SQL注入,当你把$ _ POST PARAMS和他们粘成一个数据库查询。 – 2010-01-12 00:50:34