2016-06-27 18 views
0

PHPのクラブメンバシップのWebページにテーブルフィルタ機能があります。ユーザーがテーブルをフィルタリングし、テーブルに表示するメンバーを選択できるようにしました。例えば、彼は、そのメンバーがヒットした国または国を選択することができます。私は準備された声明を使用しています。PHPクエリでワイルドカードを使用する方法

問題は、コードを簡単にするためにワイルドカードを使用する必要があることです。 PHP MySQLクエリでワイルドカードを使用するにはどうすればよいですか?たとえば、ユーザーが特定の国を望んでいない場合は、ワイルドカードを使用しますが、すべての国のすべてのメンバーを表示する場合は、ワイルドカードを使用します。

WHERE country=は自動的に国を選択しますが、すでに国を選択したような国のSELECTコントロールのような各コントロールには、ユーザーがそれを残しておくと "CA"や "NY"や "*" 「すべての国」の下でのコントロール。提出され、この値は、その後のようなクエリに追加されます。

$SelectedCountry = $_POST["country"]; 
sql .= " WHERE country=" . $SelectedCountry; 

しかし、問題は動作するようには思えないWHERE country=*を使用しています。エラーはありません。ただ機能しません。 "*"はPHP MySQLのワイルドカードですか?

+1

好きなように使って「%」サインインをしても構いませんが、準備された文を正しく使っているようです。 – chris85

+0

はい、私はそれを試みました、動作していないようです。私はそれを変数$ Bind_country = "'%'";に代入し、それを私のmysqli_stmt_bind_paramに含めました。それは正しく動作していない、それは結果を表示されていません。 *または%を使用しているときに特定の国を選択しても機能しません。その領域のクエリは 'WHERE country = '%'' – jay

+2

でした。バインディングが '%'を引用しないでください。あなたのクエリは 'WHERE country = '\'%\ '''として出てくるので、 '='ではなく 'like'を使う必要があります。 '= 'でワイルドカードはありません。ワイルドカードを使用しない場合、 'Like'は' = 'と同じ働きをします。 – chris85

答えて

2

*は、=演算子と比較すると、SQLではワイルドカードではありません。 like演算子を使用して、%を渡して何かを許可することができます。

これを行うときには、%がバインドに行く唯一のものである必要があります。ドライバがすでに値を引用して引用符をエスケープしているため、$Bind_country = "'%'";は正しくありません。だからあなたのクエリのように出てくるでしょう:

WHERE country ='\'%\'' 

=likeする必要があります。だから、

$bind_country = '%'; 

をしたいし、クエリは次のようになります。これは私のアプリケーションであれば、私は動的にwhere一部を建設する

$sql = 'select * from table where country like ?'; 

0

*WHEREに使用すると正しくありません。正当な価値しか与えられません。たとえば、

// looking for an exact value 
SELECT * FROM table WHERE column = 'value' 


// you can also do this when looking for an exact value 
// it works even if your $_POST[] has no value 
SELECT * FROM table WHERE column = 'value' OR '$_POST["country"]' = '' 


// looking for a specific or not exact value 
// you can place % anywhere in value's place 
// % denotes the unknown characters of the value 
// it works also even if your $_POST[] has no value 
// results will not be the same when you're using AND or OR clause 
SELECT * FROM table WHERE column LIKE '%val%' 
+1

'OR $ _POST [] = ''' < - それは何ですか? o_O – zerkms

+0

@zerkmsああああ! '$ _POST []'を引用符で囲むのを忘れてしまいました。ごめんなさい。 '$ _POST []'の意味は '$ _POST ['country']'です。このステートメントは、ポストが値を持たない場合、 '' '=' ''になり、最初のステートメントがfalseの場合はすべてのデータが表示されます。 – rhavendc

関連する問題