2 つの値を持つ配列があり、それを選択クエリの SQL IN 演算子で使用したいと考えています。
これが私のテーブルの構造です
id comp_id
1 2
2 3
3 1
$arr
2つの値を持つ配列がありますArray ( [0] => 1 [1] => 2 )
comp_id 1 と comp_id 2 のレコードを取得したいので、次のクエリを作成しました。
SELECT * from table Where comp_id IN ($arr)
しかし、結果は返されません。
ベストアンサー1
単純な整数なので、単純にコンマで結合できます。
$sql = "SELECT * FROM table WHERE comp_id IN (" . implode(',', $arr) . ")";
文字列、特に信頼できない入力を扱う場合:
$sql = "SELECT * FROM table WHERE comp_id IN ('"
. implode("','", array_map('mysql_real_escape_string', $arr))
. "')";
NULL
これは(空の文字列として保存されます)などの値には対応しておらず、数値の周囲に盲目的に引用符を追加します。これは、厳密なMySQLモード。
mysql_real_escape_string
は、オリジナルの mysql ドライバー拡張からの関数です。mysqli などの新しいドライバーを使用する場合は、mysqli_real_escape_string
代わりに を使用します。
ただし、信頼できない数値のみを扱いたい場合は、intval
またはを使用してfloatval
入力をサニタイズすることができます。
$sql = "SELECT * FROM table WHERE comp_id IN (" . implode(",", array_map('intval', $arr)) . ")";