1

可能重复:
PHP/MYSQL 在 WHERE 子句中使用数组

我有一个 ID 值为 [1,5,2,6,7...] 的数组,我需要在 MySQL item_id IN (1,5,2,6,7...) 语句中使用它来仅选择具有数组中列出的 ID 的行。如何将 $arrIDs 转换为可以插入到 SQL 查询中的内容?

编辑-调用的上下文:

if(!IsNullOrEmptyString($_GET["view_playlist"])) {
        session_destroy();
    }
    $id_list = implode(",", $_SESSION("playlist"));
    $sql = 'SELECT t.track_id, t.track_title, t.track_num, al.album_title, g.genre_name, a.artist_name, t.length, t.track_rating '.
    'FROM track t, genre g, artist a, album al '.
    'WHERE t.track_id IN('.$id_list.' AND t.genre = g.genre_id AND t.artist = a.artist_id AND t.album = al.album_id';
4

2 回答 2

11

使用implode()

$ids = implode(',', $your_array);
于 2012-04-30T15:43:08.250 回答
1

如果您使用的是PDOmysqli(您应该使用它,因为这些mysql_函数已经过时并且应该被放弃),那么您需要使用数组中的元素数来构造一个参数化查询,以匹配?'s in你的 SQL。

这是 PDO 中的一个示例:

$ids = array(1, 2, 3, 4);

try {
    $dbh = new PDO("mysql:host=localhost;dbname=mydbname", 'username', 'password');
} catch(PDOException $e) {
    die($e->getMessage());
}

$inClause = trim(str_repeat('?, ', count($ids)), ', ');
$stm = $dbh->prepare('SELECT * FROM mytable WHERE id IN ('.$inClause.')');
$stm->execute($ids);

// resulting SQL: SELECT * FROM mytable WHERE id IN (?, ?, ?, ?)
于 2012-04-30T15:53:57.480 回答