2012-04-30 29 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

相關問題