【问题标题】:$sql = mysql_query("SELECT * FROM books WHERE tags LIKE '%$_GET[term]%' LIMIT 0,$_GET[results]");$sql = mysql_query("SELECT * FROM books WHERE tags LIKE '%$_GET[term]%' LIMIT 0,$_GET[results]");
【发布时间】:2013-10-12 16:55:42
【问题描述】:

我正在尝试制作一个 Like 搜索引擎,这对我的网站来说很简单。这是我正在使用的代码:

  $sql = mysql_query("SELECT * FROM books WHERE tags LIKE '%$_GET[term]%' LIMIT 0,$_GET
  [results]");

while($ser = mysql_fetch_array($sql)) {
    echo $ser['title']."<br />";


}

但是当它搜索时,它只会在我的标签中寻找一个词。有人对如何让它搜索我的所有标签有什么好的想法吗?

【问题讨论】:

  • 这是一个结构不佳的标题。请考虑更改它,使其更有意义。由于这是您的第一篇文章,所以这次您可以摆脱它;)

标签: mysql arrays search-engine


【解决方案1】:
$sql = mysql_query("SELECT * FROM books WHERE tags LIKE '%$_GET[term]%'");

从您的查询中删除限制,您应该从您的查询中获得所有匹配的行。

【讨论】:

  • 限制是个人特性,与代码的整体功能无关。我已经同时运行了它,但似乎无法获得正确的结果。
  • 好吧,如果您要调试结构不佳的查询,请从删除限制开始。之后,除非您没有足够的数据,否则没有什么可以阻止查询工作。在 phpmyadmin 中尝试一个简单的查询并查看响应。
  • @user2433591。在这种情况下,请考虑提供更多信息,例如例外答案的示例。你的问题很模糊。您正在对标签执行 where 子句,然后要求遍历所有标签,并且您说限制是有意的,我很困惑。
【解决方案2】:

我强烈建议不要直接使用用户首先解析它的值,以保护自己免受 SQL 注入

尝试删除限制,然后检查它是否给出相同的结果?

【讨论】:

  • 我知道注入,我只是想让这个工作 ATM。谢谢您的关心。
  • @Originative,虽然您帖子的第一部分肯定是正确且内容丰富的,但它并没有直接回答问题。请考虑删除该帖子并将其作为评论。
【解决方案3】:

使用这个:-

$keywords =$_GET[term];
$keywords = explode('delimiter', $keyword);
$searchTermKeywords = array();
foreach ($keywords as $word) 
{

$searchTermKeywords[] = "tags LIKE '%$word%'";

}

$result= mysql_query("SELECT * FROM books WHERE ".implode(' AND ', $searchTermKeywords).");

【讨论】:

  • 这似乎可行,但它所做的一切都揭示了标题中包含输入的所有条目。
  • 这应该可以。您可以发布标签字段的快照吗? ?
猜你喜欢
  • 2020-04-18
  • 1970-01-01
  • 2012-01-06
  • 2018-08-18
  • 1970-01-01
  • 2015-10-08
  • 2017-02-12
  • 2014-12-26
  • 1970-01-01
相关资源
最近更新 更多