如何将PHP数组表示为逗号分隔的字符串?

时间:2012-04-30 15:42:32

标签: php sql

  

可能重复:
  PHP/MYSQL using an array in WHERE clause

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

EDIT-电话的背景:

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';

2 个答案:

答案 0 :(得分:11)

使用implode();

$ids = implode(',', $your_array);

答案 1 :(得分:1)

如果您正在使用PDOmysqli(由于mysql_函数已过时且应该被放弃,您应该使用它),那么您将需要构建参数化查询使用数组中的元素数量来匹配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 (?, ?, ?, ?)