2016-11-19 11 views
0

検索でクエリに似ている検索結果を探しています。たとえば、 "Test McTestFace"を検索したい "tes"を検索します。PHPでPDOを使用してMySQLデータベースを検索しようとしています

私はLIKEメソッドとMATCH AGAINSTメソッドの両方を使用しようとしましたが、いずれも機能していないようです。 MATCH AGAINSTを使用すると、何も表示されませんが、LIKEを使用する場合は直接一致のみが表示されます。

MATCH AGAINSTのための私のコード:

if (isset($_POST['submit'])) 
{ 
    $query = $db->prepare("SELECT * FROM accounts WHERE MATCH (name) AGAINST (:query)"); 
    $query->execute(array('query' => $_POST['query'])); 
    $result = $query->fetch(); 
} 
print_r($result); 

LIKEのための私のコード:

if (isset($_POST['submit'])) 
{ 
    $query = $db->prepare("SELECT * FROM accounts WHERE name LIKE :query"); 
    $query->execute(array('query' => $_POST['query'])); 
    $result = $query->fetch(); 
} 
print_r($result); 

申し訳ありませんが、あなたに感謝します。

+0

私はそれはあなたが達成したいです正確に理解することができません。あなたは簡潔な質問をすることを検討しますか? – Bex

+0

@Bex申し訳ありませんが、簡潔にはわかりませんが(今は答えられていますが)、MySQLクエリのLIKE(またはMATCH AGAINST)値を正しく使用する方法を尋ねようとしていました。特定の推論のために、私は近い文字列を入力し、一致するリストを受け取ることを可能にする簡単な検索フォームを作ろうとしています。 – qwerty77asdf

答えて

2

LIKEを使用する場合は、ワイルドカード%を使用してクエリをラップする必要があります。 docsから

LIKEを使用すると、パターンには、以下の2つのワイルドカード文字を使用することができます。

%は0文字も、任意の数の文字に一致します。

_は、正確に1文字に一致します。

すなわち

$query->execute(array('query' => '%' . $_POST['query'] . '%')); 
+0

ありがとう!これはうまくいった。 – qwerty77asdf

+0

似たような結果に基づいてソートすることは可能ですか? – qwerty77asdf

+1

おそらく最も簡単な方法は 'ORDER BY name'です。 – bcmcfc

1

ワイルドカードと照合するには、'%'.$_POST['query'].'%'を使用する必要があります。 (LIKEの場合)。

+1

もう1つは、より完全なので、より良いです。 – junkfoodjunkie

+0

申し訳ありません - 私のコメントは削除されました。さあ、ありがとう。 – qwerty77asdf

関連する問題