如何将数组存储在数据库中?

How to store a array in a database?

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

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

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

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

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

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

serialize() is one option here. You can serialize a PHP array into a string to store in the database, and when you return the string from the database you can unserialize() 将其从字符串转换回数组。

[编辑]

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

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

如果您确定要这样做,那么您有 serializeunserialize 功能。

更新(五年后) serializeunserialize 方法本质上是不安全的,应该避免。最好使用 json_encodejson_decode.

JSON 格式存储数据

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

与其存储数组,不如试试这个:

Table 'genres' :

id | name
1  | pop
2  | rock

Table 'songs' :

id | ...
1

Table 'songs_genres' :

song_id | song_genre
1       | 1
1       | 2

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

您可以使用 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.

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

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