php 在数据库表中存储“网站设置”数据的最佳方法?[关闭]

efzxgjgh  于 2023-06-04  发布在  PHP
关注(0)|答案(6)|浏览(297)

**已关闭。**此问题正在寻求书籍、工具、软件库等的建议。它不符合Stack Overflow guidelines。目前不接受答复。

我们不允许问题寻求书籍,工具,软件库等的建议。您可以编辑问题,以便可以用事实和引用来回答。
4天前关闭。
Improve this question
我在一个市场上工作,想知道什么是处理网站设置的最佳方法,如标题,URL,如果它的https,联系电子邮件,版本等。
我正试图结构表,使它很容易更新,并能够有越来越多的设置添加到它获取。
我开发了2个结构,要么将其保留在一行中,以列名作为设置名称,行列值作为设置值。而只是用mysql_fetch_assoc回显第一行值列名。

我还在考虑为每个设置设置一个新的自动增量行。并将其转换为要从数据库中获取的数组,以便为正在获取设置名称的列分配列名。

你会如何有效地处理这件事。谢谢。

xnifntxz

xnifntxz1#

对于每个不同的选项设置,使用名称/值对每行一个,这可能是最好的方法。它比很多列更灵活;如果添加了选项设置,则不必运行任何类型ALTER TABLE操作。
WordPress的wp_options表就是这样工作的。点击这里:http://codex.wordpress.org/Options_API
如果你有一个“复合”选项,你可以serialize一个php数组来存储它在表的一行。

k10s72fa

k10s72fa2#

首先我会考虑一件事,一个配置文件。。
那么你应该问问自己你的项目需要什么。。
首先,我会考虑配置文件与数据库:
与配置文件相比,数据库选项的最大优势是可扩展性,如果您有许多应用程序/站点需要这些配置,那么就选择数据库,因为它可以避免您多次复制同一个配置文件,以及所有这些不同“站点”上的文件版本控制和修改问题
否则,我会坚持使用配置文件,因为应用程序的访问速度更快,并且在SQL Server中断的情况下,该文件可能仍然可用,在这种情况下,一些配置可能仍然相关,配置文件也可能包含在您的版本控制软件中。出于一些安全原因,假设您的数据库在许多软件之间共享……
然后,如果你坚持数据库,我会recomand一行一个标签一个配置,我认为它更容易管理记录比表结构,特别是随着时间的推移和你的软件的演变。如果其他开发人员加入你的项目,你的表结构可能很快就会变得一团糟:]
最后一个参数是安全性。。一个好的做法是将软件中的“数据库用户”设置为没有数据库结构修改权限的用户,只有访问/修改删除记录的权限;)

u0sqgete

u0sqgete3#

这两种方式都很好。我想说,如果你想在管理面板中管理这些设置,按列设置更好,因为你可以通过管理员的一个简单的INSERT查询来动态添加新设置。这比ALTER TABLE查询更好(更安全)。

7rtdyuoh

7rtdyuoh4#

这取决于你使用的技术。例如,在PHP Symfony项目中,设置主要存储在平面文件(Json,xml...)中。
我为客户开发了许多大型Web应用程序。键/值表通常用于存储简单的设置。如果你需要存储多个值,你必须序列化它们,所以这有点棘手。
请记住加密敏感数据,如密码(Sha 256 + salt)。
最好的方法是创建两个表。将设置存储为键/值的表:

CREATE TABLE Settings (
    Id INT NOT NULL PRIMARY KEY,
    Key NOT NULL NVARCHAR,
    Value NULL NVARCHAR
    EnvId INT NOT NULL
);

然后需要一个环境表。

CREATE TABLE Environment  (
    Id INT NOT NULL PRIMARY KEY,
    Key NOT NULL NVARCHAR,
);

不要忘记外键约束。
此外,您应该在单独的模式中创建这些表。您将能够通过过滤访问来应用安全策略。
因此,您可以使用许多环境(开发,测试,生产...),您只需要激活一个环境。例如,您可以配置为不在开发环境中发送电子邮件,而是在生产环境中发送。
因此,您执行联接以获取指定环境的设置。您可以添加一个布尔值以轻松地在环境之间切换。
如果你使用一个文件(它不需要db连接),你可以得到这样的东西(Json):

Env:
    Dev:
        Email: ~
    Prod: 
        Email: contact@superwebsite.com
wtzytmuj

wtzytmuj5#

首先,这完全取决于您的业务需求,但到目前为止,最好的方法是创建一个设置表方案如下。

CREATE TABLE `settings` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `value` text NOT NULL,
  `type` enum('general','advanced') NOT NULL DEFAULT 'general'
);

示例

site_title = "example"
site_logo = "something.jpg"
site_url = "https://www.example.com"
address =  "#795 Folsom Ave, Suite 600 San Francisco"
email = "something@example.com"
mobile = "9898xxxxxx"

这是最好的方法,因为您永远不知道何时会引入新密钥。这里name将是value将是
值列data type应为TEXT,以便进行详细说明。
我多取了一列,名为typedata typeENUM,这是为了区分数据。您可以根据业务逻辑自定义类型。

eit6fx6z

eit6fx6z6#

我认为为每个设置设置一个单独的列对于数据类型的灵活性来说是最好的,因为每个列可以有不同的数据类型来满足其设置数据需求

相关问题