Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将配置保存到数据库-键值存储_Php_Mysql_Zend Framework - Fatal编程技术网

Php 将配置保存到数据库-键值存储

Php 将配置保存到数据库-键值存储,php,mysql,zend-framework,Php,Mysql,Zend Framework,我们的应用程序有许多配置指令。诸如“是否启用了多种语言?”或“应使用哪种CSS模板?”或“每页应显示多少项?” 我们需要将配置指令存储在数据库中。目前,每个配置“区域”都有表,该表只有一行包含列中的值。这种方法允许我们对值进行约束——可以是ENUM、INT、VARCHAR等。但是当我们需要添加新的config指令时,它是一个巨大的PITA——我们需要更新和重新部署DB schema。它还使用许多setup\u something表污染了表空间 我的想法是用基于MySQL的键值存储替换表(我们使用

我们的应用程序有许多配置指令。诸如“是否启用了多种语言?”或“应使用哪种CSS模板?”或“每页应显示多少项?”

我们需要将配置指令存储在数据库中。目前,每个配置“区域”都有表,该表只有一行包含列中的值。这种方法允许我们对值进行约束——可以是ENUM、INT、VARCHAR等。但是当我们需要添加新的config指令时,它是一个巨大的PITA——我们需要更新和重新部署DB schema。它还使用许多
setup\u something
表污染了表空间

我的想法是用基于MySQL的键值存储替换表(我们使用共享主机,配置选项很少,所以我们不能使用NoSQL)。有些值可能取决于语言环境或其他变量,但我认为可以通过类似回退的方式解决(查找以“lang:fr”开头的键,如果找不到,则尝试以“lang:default”开头的键(这将始终准备就绪)

约束只能在PHP中使用具体的设置类进行检查,但不会进行DB检查

  • 是否有现成的解决方案(最好与Zend框架配合使用)
  • 这个解决方案的陷阱是什么(除了显而易见的——我不能一次获取整个“行”或多行——这不是问题)
  • [您是否使用过|您会使用]类似的解决方案还是完全不同的解决方案

  • 您可以简单地拥有一个包含所有配置设置的MySQL表。可能是这样的:

    config_id (INT autoincrement)
    config_group (VARCHAR) this gives you something to group your configuration setting with
    config_key (VARCHAR) this would be the key name by which you would reference the value
    data_type (VARCHAR) you can use this to tell your application how you want to treat this data within the application (i.e. treat it as integer, float, string, etc.)
    value (VARCHAR) the value
    
    当然,您需要获取字符串值并在代码中对其进行操作,以便将其视为整数、浮点、字符串等


    也许你会注意到最干净的方法,但是我已经见过很多次了。

    你可以简单地拥有一个MySQL表,其中包含所有配置设置。也许类似这样:

    config_id (INT autoincrement)
    config_group (VARCHAR) this gives you something to group your configuration setting with
    config_key (VARCHAR) this would be the key name by which you would reference the value
    data_type (VARCHAR) you can use this to tell your application how you want to treat this data within the application (i.e. treat it as integer, float, string, etc.)
    value (VARCHAR) the value
    
    当然,您需要获取字符串值并在代码中对其进行操作,以便将其视为整数、浮点、字符串等

    也许你会注意到最干净的方法,但我已经多次看到这种方法。

    Wordpress系统(当然使用MySQL)有一个wp_选项表。它包含以下列:

     option_id    (autoincrement pk)
     blog_id      (parameter grouping number)
     option_name  (text of option name)
     option_value (text of option value)
     autoload     ('yes' or 'no')
    
    选项_值可以是简单的数字(0、1、42),也可以是需要的文本字符串。一些选项_值项是可解析的类似JSON的序列化参数集

    “自动加载”列允许系统在需要时跳过很少使用的设置

    这非常有效,并提供了很大的灵活性。

    Wordpress系统(当然使用MySQL)有一个wp_选项表。它包含以下列:

     option_id    (autoincrement pk)
     blog_id      (parameter grouping number)
     option_name  (text of option name)
     option_value (text of option value)
     autoload     ('yes' or 'no')
    
    选项_值可以是简单的数字(0、1、42),也可以是需要的文本字符串。一些选项_值项是可解析的类似JSON的序列化参数集

    “自动加载”列允许系统在需要时跳过很少使用的设置


    这非常有效,并提供了很大的灵活性。

    将您的键/值存储在php数组中,序列化它,然后将生成的字符串存储在数据库表的文本列中。这非常灵活且易于实现。唯一的缺点是您无法查询单个属性。

    将您的键/值存储在php数组中,serialize然后将生成的字符串存储在数据库表的文本列中。灵活性强,易于实现。唯一的缺点是您不能查询单个属性。

    为什么不使用一个表和键/值对?如果是按用户配置,您可以始终使用user/key/value作为表数据。如果您不需要编写te/从web应用程序(例如管理界面)更改参数,我会使用文本文件中的某些内容。例如yaml或ini样式的配置。现有解决方案/php libs处理此问题没有问题。这是我的第一个想法。但我想先众包体验:)可能存在一些无法预见的陷阱;)B条款:我们确实需要:(一些项目可以从管理界面更新。为什么不使用一个表和键/值对?如果是按用户配置的,您可以始终使用用户/键/值作为表数据。如果您不需要从web应用程序(例如管理界面)写入/更改参数),我会使用文本文件中的某些内容。例如yaml或ini样式的配置。现有解决方案/php libs处理此问题没有问题。这是我的第一个想法。但我想先众包体验:)可能存在一些不可预见的陷阱;)B条款:我们确实需要:(一些项目可以从管理界面更新。这不是一个选项。这些选项需要可以从SQL中读取。这不是一个选项。这些选项需要可以从SQL中读取。