2012-04-09 4 views
0

私はIDの配列が$friends = array(0001, 0002, 0003, 0004)で、データベースはtable_name = friendscolumn_header = fidです。 のfriendsには、フレンドIDの1つが含まれていても、いなくてもかまいません。 $friendsをクエリに入力し、$friendsfidの両方にある現在の値をすべて返したいとします。PDOを使用したSQLデータベースからの配列値の一致

私はfid={array_values($friends)}が間違っていると確信しているが、私はWHERE部分に値の配列を渡す方法がわからない...

//All DB_X's are defined in another file that is included in this actual file 
$db = new PDO("mysql:host=".DB_SERVER.";dbname=".DB_NAME, DB_USER, DB_PASS); 
$stmt = $db->prepare("SELECT fid FROM friends WHERE fid={array_values($friends)} ORDER BY fid ASC"); 
$stmt->execute(); 

$friendResults = $stmt->fetchAll(); 

答えて

1

あなたはSQLのIN演算子の使用を行う必要があります。

SELECT ... FROM ... WHERE foo IN (val1, val2, ...) 

あなたは必要なSQLのビットを取得するためにPHPのimplode()機能を使用することができます。

$values = implode(', ', array_values($friends)); 
$query = "SELECT ... FROM ... WHERE fid IN ({$values})"; 

あなたの値が数値の場合、上記はうまくいくでしょう。彼らは文字列である場合は、implode() INGの前に値を変更する必要があります:

$values = array_map(array_values($friends), function($value) { 
    return "'{$value}'"; // Here is where you could do sanitization 
}); 
$values = implode(', ', $values); 

ご注意:あなたは適切にSQLインジェクションを防ぐために$friendsにデータをサニタイズしなければなりません。

関連する問題