2012-04-30 28 views
1

Possible Duplicate:
PHP/MYSQL using an array in WHERE clause如何将一个PHP数组表示为逗号分隔的字符串?

我有ID值[1,5,2,6,7 ...]的数组和我需要使用在MySQL ITEM_ID IN(1,5,2,6,7。 ..)语句只选择数组中列出的ID。我怎样才能将$ arrID转换为我可以插入到我的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'; 

回答

11

使用implode();

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

我得到一个错误 - PHP致命错误:函数名称必须是一个字符串 – antonpug

+0

检查这行代码的错误之前。这个小片段是正确的。 –

+0

我编辑了这个问题 - 错误发生在调用implode的行上。 – antonpug

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 (?, ?, ?, ?) 
+0

我正在使用mysqli,为什么你认为它们过时了?他们工作很好,从来没有真正有任何问题? – antonpug

+0

@antonpug:你真的低估了我,因为**你**误读了我的答案?我从来没有说过不要使用'mysqli'函数。我说'mysql_'函数是陈旧的,应该放弃,而不是'mysqli'。这个答案显示了使用参数化查询的正确方法(这是在SQL中使用非文字数据的首选方式)。 – webbiedave

相关问题