【问题标题】:How to store a array in a database?如何将数组存储在数据库中?
【发布时间】:2020-11-09 18:54:52
【问题描述】:

我正在尝试学习 php 数据库,但我有一个问题。如何将数组存储在数据库中?我在 stackoverflow 上看到了一个答案,他们正在使用 double 类型做一些事情,而在另一个答案中,他们正在谈论为每个用户创建一个表,但我找不到解决方案。

如此总结。我想在数据库中存储一个数组。我可以访问 phpmyadmin,所以我可以从那里设置值类型。我想将该数组存储在一列中。

有人可以帮我解决这个问题吗?

编辑一个:我要存储的东西是音乐标签。所以在代码中它会是这样的:

 array('pop','rock','country');

我想将它存储在一个列中以便于搜索

【问题讨论】:

  • 为什么要将数组存储在一列中?
  • 您应该首先学习如何使用数据库。您不应将整个数组存储在单列中,而应将其存储在多列中。
  • 正确的方法是使用 json_encode 数组并存储它。
  • 如果该数组只是标签,您应该将其保存为implode(',',array('pop','rock','country'))
  • json_encode() / json_decode() 也是一个有效选项

标签: php mysql arrays phpmyadmin


【解决方案1】:

不要存储数组,试试这个:

表“流派”:

id | name
1  | pop
2  | rock

表“歌曲”:

id | ...
1

表'songs_genres':

song_id | song_genre
1       | 1
1       | 2

并使用 JOIN 获取每首歌曲(或其他)的流派

【讨论】:

  • @Vinc199789 这实际上是正确的答案,serializeunserialize 不应该用于您的情况,因为我和其他几个人在添加您的使用示例之前回答了问题。
【解决方案2】:

通常,您不应将数组存储在 db 的单个列中。最好有一个带有标签的表格和另一个将您的实体与其标签链接的表格。因此,在尝试将数组存储在表中之前,请考虑在您的特定情况下是否真的是正确的做法(通常不是)。

如果您确定要这样做,那么您有 serializeunserialize 函数。

更新(五年后) serializeunserialize 方法本质上是不安全的,应该避免使用。最好使用json_encodejson_decodeJSON 格式存储数据。

【讨论】:

  • 但是如何将一个表中的标签与另一个表中的歌手链接?还是解决方案复杂
  • 您使用第三个表,其中包含对标签 ID 和歌手 ID 的引用。然后在查询中使用join。它稍微复杂一些,但这是要走的路。
【解决方案3】:

serialize() 是这里的一种选择。您可以将PHP数组序列化为字符串存储在数据库中,当您从数据库中返回字符串时,您可以unserialize()将其从字符串转换回数组。

[编辑]

在您使用计划存储的数据示例更新问题后,在实际数据库结构中使用 MANY:MANY 关系是正确的方法,正如 @Alex M 的 answer 中所提到的那样

【讨论】:

    【解决方案4】:

    您可以使用 json_encode 从数组中创建一个 json 字符串,如下所示:

        $jsonarray = json_encode($array);
    

    然后在检索到你解码的信息之后。

        $array = json_decode($jsonarray, true); // the true will turn it into an array, 
        otherwise it's an object.
    

    但我建议不要这样做。尝试创建一个具有适当列的数据库并将您的数据存储在那里。

    【讨论】:

      【解决方案5】:

      每个用户都可以拥有一个或多个音乐标签。以后他们想添加或删除这些标签。如果您将他们的所有标签存储在一列中,您几乎只剩下字符串操作而不是数据库操作。创建新表 tbl_user_music_Tags 并将每个标签与用户 ID 一起保存。这样,您就可以完全灵活地为特定用户添加、删除、更新和读取标签。

      【讨论】:

        【解决方案6】:

        您可以将其存储为字符串,例如 'rock, pop, foo, ...'。 但是,如果您想管理标签,我认为您应该按照@Alex M 的建议将标签存储在其他表中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-06
          • 2013-09-17
          • 1970-01-01
          • 2018-10-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多