如何将数组存储在数据库中?
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 之前,请考虑一下在您的特定情况下这样做是否真的正确(通常不是)。
如果您确定要这样做,那么您有 serialize
和 unserialize
功能。
更新(五年后)
serialize
和 unserialize
方法本质上是不安全的,应该避免。最好使用 json_encode
和 json_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 中。
我正在尝试学习 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 之前,请考虑一下在您的特定情况下这样做是否真的正确(通常不是)。
如果您确定要这样做,那么您有 serialize
和 unserialize
功能。
更新(五年后)
serialize
和 unserialize
方法本质上是不安全的,应该避免。最好使用 json_encode
和 json_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 中。