Php 将数组存储在db中

Php 将数组存储在db中,php,arrays,Php,Arrays,我有一个有24个不同按钮的页面 当用户登录时,我必须检查他是否有权单击按钮并激活特定功能。因此,我的想法是存储一个包含24项的数组,采用这种方式: [0]=>'yes', [1]=>'no 所有的按钮都是如此 当我在登录时从数据库中检索这个数组时,我将它存储在$\u会话数组中,然后针对我可以执行的每个按钮 if($_SESSION['right'][0]=='yes'){ //show the button }else{ //hide the button } 该

我有一个有24个不同按钮的页面

当用户登录时,我必须检查他是否有权单击按钮并激活特定功能。因此,我的想法是存储一个包含24项的数组,采用这种方式:

[0]=>'yes',
[1]=>'no
所有的按钮都是如此

当我在登录时从数据库中检索这个数组时,我将它存储在$\u会话数组中,然后针对我可以执行的每个按钮

if($_SESSION['right'][0]=='yes'){
    //show the button
}else{
    //hide the button
}
该数组将存储在一个表中,其中将有所有不同的用户配置文件(因此每个数组只存在一次),并且每个用户将有一个到配置文件id的连接


在数据库中存储阵列的最佳方式是什么?或者我错过了一个更好的方法来实现我的目标?

你可以将你的数组插入mysql中的一个varchar字段中,然后当你需要它时,从数据库中获取它,并将它保存下来。但更好的方法是使您的表关系化。

我在一些CMS(如Wordpress和OpenCart)中看到了相同的方法

数组存储为序列化字符串。 所以,你可以使用 序列化($array\u值) 插入,以及
$array\u value=unserialize($row['field1'])进行选择。

不要将数据像那样存储在数据库中。这与DB的目的背道而驰

创建一个以用户id为外键的权限表,然后为每个权限添加一个
INT(1)UNSIGNED
列。零表示否,一表示是。

看看

在一个整数中最多可以存储32或64(在64位系统上)个值


每个按钮都有一个数字2^n,其中n是按钮索引。生成的数字是所有活动按钮编号的总和。

创建表用户、创建表选项、使用用户id和选项id为每个用户创建表选项并以这种方式存储是的,我知道我可以这样做,但我已经有一个非常重负载的数据库,我想让它更容易。在我的方法中,对于所有选项,每个用户只检索一行。你可以将你的数组编码为一个JSON对象(简单地说是一个字符串),保存在db中,然后解码以检索回数据(JSON到数组)。看看php.net网站上的json_encode和json_decode:)谢谢@Teknocia,但是您会在数据库结构中输入什么数据类型来存储json?顺便说一句,我已经使用了json功能。这完全取决于它是字符串(json)的长度。可能只是一个瓦查尔:-)是的,我知道。数据库是关系型的,但是对于这个任务,我希望保持它的简单性,并且在我已经做的查询中只检索一个字段。数据库已被服务器重载application@LelioFaieta在这种情况下,您可以使用serialize/unserialize或json_encode/json_decode方法进行数据存储和检索,将varchar设置为存储数据的列的数据类型?mysql中没有json的特定数据类型吗?@LelioFaieta从mysql 5.7.8开始,mysql支持原生json数据类型,请参阅::但是对于以前的版本,您需要坚持使用varcharAs,我在其他评论中已经说过,这是为了在已经存在的查询中再获取一个字段。数据库的负载已经很重了。对于所有核心功能,db都是一个关系数据库,我仍然反对它。