2016-04-23 6 views
1

私はPHPの簡単な検索エンジンを構築しています。これは、ユーザーがMySQLデータベースから動物の名前を検索するときに動物の名前を取得します。彼らは入力"red panda"再度Red Panda rowを返すとき、それは、Red Panda行を返すとユーザ入力"panda"Mysqlのクエリで最初の単語が見つかりません

ID | Name 
--------------- 
1 | Red panda 
2 | Okapi 
3 | Red fox 

は、私は、次の表を持っていると言います。

しかし、ユーザが"red"を入力すると何も返されません。

ただし、"Okapi"を検索すると機能しません。

何らかの理由で、複数の単語からなる複数の単語の最初の単語を検索しても何も返されません。

私はデータを検索するために使用しているクエリは以下の通りです:あなたは、あなたのような文字列の開始時にワイルドカードを置い

"SELECT * FROM example_table WHERE Name LIKE '%".$search."%'"; 
+0

あなたが持っている場合は、PHPコードとHTMLコードを一緒に共有してください。 –

+2

これを試してみてください "SELECT * FROM example_table Where LIKE '%$ search%'" –

+0

@SachinVairagiは正しかったし、うまく動作します –

答えて

1

あなたはこのようにそれを使用することができますですので、検索用語にendという名前が見つかります。

は、検索語のような文字列の末尾にワイルドカードを追加が含まれているすべての名前を検索するには:あなたはは、あなたが探しているものが含まれている何かを見つけるために必要がある場合は

LIKE '%$search%' 
0

"SELECT * FROM example_table WHERE Name LIKE '%%$search'" 
1

クエリ内に$searchの前後にワイルドカード%を使用する必要があります。

したがって、あなたが行う必要があります。あなたが現在使用している

$query = "SELECT * FROM example_table WHERE Name LIKE %$search%"; 

の方法は、それの終わりに$searchを持っているだけで、それらの値と一致します。例えば

%kaに一致
ID | Name 
--------------- 
1 | Red panda 
2 | Okapi 
3 | Red fox 
4 | kaok // added for examples 
  • kaokOkapika後に何かを持っているので、

    は何も返しません。このクエリでは、が式で始まるのすべてを探しています。 %ka%に一致

  • kaokOkapiの両方を返します。このクエリでは、にはという式がすべて含まれています。 ka%に一致

  • kaokを返します。このクエリでは、が終了するのすべてを探しています。

パターンマッチングについては、MySQL Dev guideを参照してください。

もちろん、Elzo Valugiが指摘したように、彼の答えでは、SQLインジェクションを避けるために入力内容を覚えておく必要があります。

0

あなたのSQLクエリを若干修正する必要があるので、それは何も返さない:

変更をこの本に

"SELECT * FROM example_table WHERE Name LIKE '%%$search'" 

"SELECT * FROM example_table WHERE Name LIKE '%$search%'" 

検索文字列の両側に%を追加することによりデータベースは、その単語が挿入されている列の値を探します。

それがあなたのために解決されたのか、それともそれ以上の問題があるのか​​を教えてください!

+0

ありがとう、これはそれを修正したようだ! – Crodociles

+0

@Crodociles問題ありません!私の解決策があなたのために働いたものなら、それを受け入れて(緑色のチェックマーク)、将来のユーザーはスレッドを読むときにそれが働いていることを知ってください:) – Webeng

0

この

%のワイルドカードは、この

$query = "SELECT * FROM example_table WHERE Name LIKE '%$search%'"; 
+0

http:// stackoverflow。com/questions/36809684/mysql-query-not-finding-first-word/36809695#comment61192416_36809734 – C2486

0

のようなサイドノートでなければなりませんしようと、SQLクエリに直接ユーザー入力を集約しません。これは完全に安全ではない練習であり、SQLインジェクションにつながります。実際、ここに示されているすべての例は悪い習慣です。 mysqliまたはPDOを使用してクエリを作成するには、bindingパラメータを使用します。

$search = "%". "your_search_term" . "%"; 
$sth = $dbh->prepare('SELECT * 
    FROM example_table 
    WHERE name like :search'); 
$sth->bindParam(':search', $search, PDO::PARAM_STR, 12); 
$sth->execute(); 
0

選択クエリで問題が発生しました。選択クエリのみを変更する必要があります。

select * from tbl_pets where name like "%'".$data."'%" 

と実際のMySQLのクエリ

select * from tbl_pets where name like "%red%" 

あなたはhere.Iあなたもチェックすることができるからスキーマを作成して見てみることができます。

http://sqlfiddle.com/#!9/c08b0/1

関連する問題