【问题标题】:How do you output contents of an array as a comma separated string?如何将数组的内容输出为逗号分隔的字符串?
【发布时间】:2010-09-22 19:12:24
【问题描述】:

我想将数组 if ID 转换为逗号分隔值的字符串,以在 MySQL UPDATE 查询中使用。我该怎么做?

【问题讨论】:

  • 对 SQL 注入要非常非常小心...如果您正在构建这样的查询字符串,您可能犯了设计错误。
  • 我不同意,rmeador。如果您知道数组的内容是安全的(例如:所有整数),那么这种样式根本没有害处。
  • @nickf 是的,但我仍然遇到对 id 的类型检查不足的情况。从长远来看,一些额外的检查和消毒更容易也更安全。
  • 我不认为有任何问题,你永远不知道会发生什么,如果你犯了错误,或者数据是否损坏,或者......无论如何,总是清理你的 SQL .
  • 嗯,是的,您可以回答“清理您的 SQL”。你可以很容易地说“将你的代码检查到版本控制中”、“经常保存”或“给你妈妈打电话告诉她你爱她”......所有这些都是很好的建议,但与问题无关. :)

标签: php arrays


【解决方案1】:

如果所有 id 都应该是数字,这可能会更好。 用

检查它是否包含至少一个整数
$ids = array_filter($ids, 'is_int');
if (!$ids) {
    //no valid ids returned.
    die('or something');
}
$sql .= '(' . implode(',', $ids) . ')';

【讨论】:

    【解决方案2】:

    通常这种情况是人们从另一个表构建一个数组以用于第二个查询。如果是这种情况,您可以使用子查询来完成此操作。

    例如。 UPDATE Table SET Column = Value WHERE ID IN (SELECT ID FROM Table2 WHERE CONDITIONS)

    【讨论】:

      【解决方案3】:

      记得转义值:

      '"' . implode('","', array_map('mysql_real_escape_string', $data)) . '"'
      

      【讨论】:

        【解决方案4】:
        implode(',', $array);
        

        【讨论】:

        • 别忘了先检查数组是否为空 - 否则您的 SQL 将看起来像“WHERE id IN ()”,这是一个错误。
        • 这是一个危险的答案,因为该字符串的规定用途是在 SQL 语句中。请参阅 troelskn 的回答,它演示了如何转义所有数组元素。
        • 我们不知道他是否没有得到已经清理过的数据。但确实有人问这么简单的问题也可能需要一些关于代码安全的建议;-)
        • 阅读 OP 评论。我只回答了问题,不需要做不必要的假设
        【解决方案5】:

        确保在执行查询之前通过mysql_real_escape_string() 传递结果。如果您按照其他人的建议使用 implode(),这应该可以防止 sql 注入。

        正如 nickf 所提到的,始终首先检查以确保数组不为空或 null,然后处理这些情况。由于您只处理 int,因此在分配中进行一些类型检查不会有什么坏处,否则如果字符串以某种方式滑入,您将收到 sql 错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-24
          • 1970-01-01
          • 2020-05-21
          • 2011-06-18
          • 2019-05-19
          相关资源
          最近更新 更多