2011-02-08 12 views
1

IはIN句PHPアレイのMySQLクエリ

SQL = "

()

のいくつかのQUERY some_item" と、このようなクエリを有します。

php配列のすべての項目をIN句に入れるためにforループを実行する必要がありますか、またはこれを行う関数またはメソッドがありますか?ここ

+0

注[コードとしてフォーマットライン](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-を内破試みることができますブロック)に4つのスペースをインデントします。エディタツールバーの "{}"ボタンはこれを行います。あなたの質問を編集して試してみてください。書式設定の詳細とヒントについては、エディタツールバーのオレンジ色の疑問符をクリックしてください。 – outis

答えて

0

あなたはあなたができる

$item_ids = array(1, 2, 3, 4, 5); // somehow populate this array 
$item_list = implode(',', $item_ids); 

$sql = "SOME QUERY WHERE some_item IN ({$item_list})"; 
0

:ときの値をエスケープするように注意してください

sprintf("... WHERE some_item IN ('%s') ...",implode("','",$escaped_string_array)); 

:文字列値について

sprintf("... WHERE some_item IN (%s) ...",implode(",",$numeric_array)); 

:配列内の数値の場合

$ids = array(1, 2, 3); 
$query = 'SELECT * FROM items WHERE id IN(' . implode(',', $ids) . ')'; 
+0

本当にありがとう! – Alexander

1

配列を構築する。

希望すると便利です。

+1

あなたはエスケープメソッドなどを呼び出す前にarray_filter()を実行することができます。http://php.net/manual/en/function.array-filter.php – dogmatic69

+0

有用なコメントのために+1、ありがとう:) – aorcsik

1

アレイ内のもののリストがある場合は、JOINを使用して構築することができます。物事を引用符で囲む必要がないので、数値的には最も簡単です。

配列に文字列が含まれている場合は、データを配列に格納するときにそのデータをエスケープする必要があります。しかし、これをやったら、上記と同様のやり方で引用符を付けることができます。上記の例では、あなたの潜在的にあなたがしたくない何かに一致する可能性がIN ("")を与えることになるので、

$sql = 'SOME QUERY WHERE some_item IN ("' . join('","', $a_myData) . '")'; 

一つの潜在的な問題は、空の配列です。

上記の例では、NULL値も考慮していません。その周りの1つの方法は、あなたの配列に既にそれらの周りの引用符で文字列を設定することです(したがって、NULLを独自の値として持つことができます)。

+0

ありがとう多く! – Alexander