2017-08-14 9 views
0

私は、ワイルドカードスタイルの演算子の恩恵を受けるMySQLクエリを持っています。残念ながら、検索キーを絞り込む方法がわからないので、インターネット検索は困難であることが証明されています。WHERE句で使用できるワイルドカード演算子はありますか?

Iは、例えば...

$my_color = "red"; 
$a = $pdo->prepare("SELECT * FROM my_table WHERE color=:color"); 
$a->bindParam('color', $my_color); 
$a->execute(); 
$data = fetchAll(PDO::FETCH_ASSOC); 

これは素晴らしい作品があります。しかし、私は顧客にあらゆる色を検索する能力を与えたいと思っています。はい、私は(基本的に)if-then PDOブロック全体で複数のクエリを作成することができましたが、より洗練されたソリューションが望まれます。

MySQLはWHERE条件を「何かを受け入れる」と解釈するものに設定できますか? ANY、架空のMySQLのコマンドを想定すると、私は...私の変数を設定する機能を好き

$my_color = "ANY"; 

、任意の色のすべての行を取得します。

+0

WHERE color LIKE '%%' ' - ' $ my_color = "%%" ' – GrumpyCrouton

+0

なぜあなたにすべてを与えるwhere節を使用しないのですか?またはwhere句を入れる必要がある場合は、1 = 1と言うことができます。 –

答えて

1

利用LIKEの代わり=。値にワイルドカード文字が含まれていない場合、LIKEは正確な同値チェックを実行します。しかし、一致するものはワイルドカードとして%です。したがって、より良いオプションは、ロジックではなくPHPにすることです。

if ($color) { 
    $a = $pdo->prepare("SELECT * FROM my_table WHERE color=:color"); 
    $a->bindParam('color', $my_color); 
} else { 
    $a = $pdo->prepare("SELECT * FROM my_table"); 
} 
$a->execute(); 

は、複数のフォーム入力から動的WHERE句を構築するためのより一般的な技術のためのhttps://stackoverflow.com/a/28909923/1491895を参照してください。

+0

私は不思議なことに、なぜPHP側を扱うのがより良い選択肢ですか? – GrumpyCrouton

2

あなたは、入力は次のようにワイルドカード文字であることをLIKE句を使用することができます。

$my_color = "%"; 
$a = $pdo->prepare("SELECT * FROM my_table WHERE color LIKE :color"); 
$a->bindParam('color', $my_color); 
$a->execute(); 
$data = fetchAll(PDO::FETCH_ASSOC); 

More Info on the LIKE clause

関連する問題