gpt4 book ai didi

php - 管理存储在数据库中的 php 应用程序设置

转载 作者:搜寻专家 更新时间:2023-10-30 23:36:13 24 4
gpt4 key购买 nike

我有一些设置存储在 mysql 数据库表“设置”中,用于 php web 应用程序。该表有两列,即“option_name”和“option_value”。我构建了一个类来检索或更改这些设置(通常通过复选框更改),我想知道它是否可以被认为是一种好方法:

class Settings {
public function __construct(PDO $db_connection) {
$this->db_connection = $db_connection;
}

public function getValue($setting_name) {
$sql = "SELECT option_value FROM settings WHERE option_name = ?";
$stmt = $this->db_connection->prepare($sql);
$stmt->execute([$setting_name]);
return $stmt->fetchColumn();
}

public function setValue($setting_name, $value) {
// Some code here to sanitize value
if (!is_bool($value)) {
throw new InvalidArgumentException("value must be boolean");
}
$sql = "UPDATE settings SET option_value = ? WHERE option_name = ?";
$stmt = $this->db_connection->prepare($sql);
return $stmt->execute([$value, $option_name)];
}
}

这样每次使用方法时,都会向数据库发送一个查询。此外,该类只是查询的“包装器”。这被认为是管理设置的好方法吗?我很想听听一些建议

最佳答案

我当时使用的是那种解决方案,它在某些网络应用中对我来说效果非常好。

根据我的经验,当您开始在其中放置越来越多的设置时,对该表的查询数量和执行时间都会增加,因此我通常为此目的制作某种内存缓存(如果框架不这样做的话)为你)。尽管有人会说索引 option_name 会使查询变得无关紧要,但在分析方面可以看到它们的影响。

该缓存在启动时被填满,并在 setValue(和插入)时刷新,因此不需要在 getValue 上发出选择。唯一的问题是,如果您通过数据库(或您的迁移脚本)手动更改值,则需要刷新缓存。单个应用的多个节点使这变得更加麻烦,但这是可以做到的。

即便如此,如果您的应用程序需要这种动态配置更改,或者您在应用程序的多个实例上有多个设置,我会说去做吧。您具有运行时灵 active ,并且数据库转储会捕获这些设置,因此您不必从某些外部文件中提取它。

附言很抱歉回答很长,这是我在 StackOverflow 上的第一个答案。玩得开心!

关于php - 管理存储在数据库中的 php 应用程序设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42091460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com