0

基本的に、テーブルの設定は次のようになります。

+-----------+----------+-------------+
|   land    |   city   |  perimeter  |
+-----------+----------+-------------+
|  America  |  Kansas  |      1      |
|  Britain  |  Berlin  |      4      |
|  Japan    |  Tokyo   |      5      |
+-----------+----------+-------------+

私の現在のクエリ:

$query = "SELECT land, city, perimeter FROM agents WHERE land LIKE ? OR city LIKE ? OR perimeter LIKE ?";
$params = array("%China%","%Kansas%","%6%");

このクエリは機能します。これを使用すると、が返されAmerica,Kansas,1ます。ただし、私の場合は次のparamsようになります。

$params = array("%China%","%Beijing,London,Kansas,Bali%","%6%");

これは何も返しません。LIKE少なくとも1つの項目がコンマで区切られた値に存在する場合に一致するように、コンマで区切られた値で使用するにはどうすればよいですか。

4

2 に答える 2

1

LIKE使用する代わりにREGEXP(詳細はこちら:http ://dev.mysql.com/doc/refman/5.0/en/regexp.html )。

$query = "SELECT land, city, perimeter FROM agents
   WHERE land REGEXP ? OR city REGEXP ? OR perimeter REGEXP ?";
$params = array("^China$","^Beijing|London|Kansas|Bali$","^6$");
于 2012-07-26T12:27:48.653 に答える
0

カンマ区切りの値を渡して、パラメーター関数によって適切にグループ化されることを期待することはできません。

現状のクエリは次を返します。

SELECT land, city, perimeter FROM agents WHERE land LIKE 'China' OR city LIKE 'Beijing,London,Kansas,Bali' OR perimeter LIKE '6'

これは明らかにあなたが望むものではありません。

if(count(explode(',', $myArray))>1)クエリに渡される変数のいずれかが複数のフィールドを含む配列であるかどうかを確認するなどして、パラメータのいずれかが展開可能な配列であるかどうかを確認する必要があります。orそうである場合は、複数のステートメントを適切にチェックする別のクエリ文字列を実行する必要があります。

于 2012-07-26T12:29:46.477 に答える