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

Posted

技术标签:

【中文标题】如何将 PHP 数组表示为逗号分隔的字符串? [复制]【英文标题】:How to represent a PHP array as a comma-delimited string? [duplicate] 【发布时间】:2012-05-10 07:35:39 【问题描述】:

可能重复:php/mysql using an array in WHERE clause

我有一个 ID 值为 [1,5,2,6,7...] 的数组,我需要在 MySQL item_id IN (1,5,2,6,7...) 语句中使用它仅选择具有数组中列出的 ID 的行。如何将 $arrIDs 转换为可以插入到 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';

【问题讨论】:

【参考方案1】:

使用implode()

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

【讨论】:

我收到一个错误 - PHP 致命错误:函数名必须是字符串 在这行代码之前检查是否有错误。这个小sn-p是对的。 我已经编辑了问题 - 错误发生在调用 implode 的行上。 谁投了反对票?为什么?【参考方案2】:

如果您正在使用 PDO 或 mysqli(您应该这样做,因为 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 (?, ?, ?, ?)

【讨论】:

我用的是mysqli,你为什么觉得它们过时了?他们工作得很好,从来没有真正遇到过任何问题? @antonpug:你真的因为误读了我的答案而否决了我吗?我从来没有说过不要使用mysqli 函数。我说mysql_ 功能已经过时,应该被放弃,而不是mysqli。此答案显示了使用参数化查询执行此操作的正确方法(这是在 SQL 中使用非文字数据的首选方法)。

以上是关于如何将 PHP 数组表示为逗号分隔的字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将逗号分隔的字符串转换为数组? [复制]

如何将数组转换为逗号分隔的单词字符串? [复制]

如何使用 Angular js 或 java 脚本将逗号分隔的字符串分解为单个索引数组

将逗号分隔值转换为双引号逗号分隔字符串

如何将逗号分隔的字符串转换为列表?

将逗号分隔的字符串拆分为数组?