0

人々が複数の単語を検索するときにデータベースを検索するための基本的な検索コードがあります。私は多くの調査を行いましたが、すべてのアルゴリズムはほとんど同じようです。検索語をトリミングします。explodeそれらをにarray。次に、foreachまたはwhileを使用して、配列の各単語を に追加し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、それが言う2番目の変数を見てください"decription RLIKE '$arraySearch'"

検索が機能するためには、含まれる単語$arraySearchを一重引用符で囲む必要があります。しかし、試してみると、スクリプトは実行されません。しかし、一重引用符を取り除くと、スクリプトが実行されます。しかし、それは検索を実行しません。エラーが発生しdieます。この場合、エラー メッセージを実際のクエリにして、何が問題なのかを調べてみました。

したがって、一重引用符を削除して「car tyre」を検索するとします。クエリは次のようになりますが、次の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 に答える