0

当人们搜索超过 1 个单词时,我有一个基本的搜索代码来搜索数据库。我做了很多研究,所有的算法似乎都差不多。修剪搜索词。explode他们变成了一个array. 然后使用foreachwhile将数组的每个单词添加到msql_query.

但有一个问题。这是我的代码:

if (isset($_POST['search'])){
$words = $_POST['searchfield']; 
$arraySearch = explode(" ", trim($words));       
$countSearch = count($arraySearch);
$a = 0;
$query = "SELECT * FROM parts WHERE ";

while ($a < $countSearch)
{
  $query = $query."description RLIKE '$arraySearch[$a]'";
  $a++;
  if ($a < $countSearch)
  {
    $query = $query." AND ";
    }

  }

$results=mysql_query($query) or die($query);
 if(!$results){
    $msg = "No results, please try another search";}


}

好的,看看$query它说的第二个变量"decription RLIKE '$arraySearch'"

为了使搜索工作,任何单词都$arraySearch必须用单引号引起来。但是当我尝试它时,脚本将无法运行。但是如果我去掉脚本运行的单引号。但它不执行搜索。它die出现了错误。在这种情况下,我将错误消息作为实际查询来尝试找出问题所在。

所以如果我去掉单引号并搜索“汽车轮胎”。查询将是SELECT * FROM parts WHERE description RLIKE car AND description RLIKE tyre,但它不会工作,除非它像这样:SELECT * FROM parts WHERE description RLIKE 'car' AND description RLIKE 'tyre'

我知道这一点是因为我已经通过将它输入另一个查询来测试它来测试它。

我花了好几个小时试图解决这个问题,但我想不通。为什么要这样对我?我如何绕过它?为什么其他人似乎没有同样的问题??????

谢谢你的帮助:)

....事后添加:我认为这样做的唯一可能方法是在变量中已有单引号。但我不知道该怎么做。如: $arraySearch = ("'car'", "'tyre'");有什么想法吗?

4

2 回答 2

1

要使引号正常工作,请尝试这样编写:

$query = $query."description RLIKE '".$arraySearch[$a]."'";

在单引号中添加".and."可能会解决您的问题。

于 2013-03-07T19:36:33.537 回答
-1

尝试这样做:

$quote = "'";

$query = $query."description RLIKE $quote$arraySearch[$a]$quote";
于 2014-01-01T11:32:05.400 回答