0

IDの配列$friends = array(0001, 0002, 0003, 0004)とデータベースがあります。ここでtable_name = friends、、column_header = fidfidinにfriendsは、フレンドIDの1つが含まれる場合と含まれない場合があります。クエリに入力して、の行と行の$friends両方にあった現在価値をすべて返したいと思います。$friendsfid

間違いは確かです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();
4

1 に答える 1

1

INSQLの演算子を使用する必要があります。

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

PHPのimplode()関数を使用して、目的のSQLビットを取得できます。

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

上記は、値が数値の場合に機能します。文字列の場合は、次のようにする前に値を変更する必要がありますimplode()

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

$friends注意: SQLインジェクションを防ぐために、データを適切にサニタイズする必要があります。

于 2012-04-09T21:38:13.770 に答える