我有一些设置存储在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)];
}
}
这种方式每次使用方法时,都会向数据库发送查询。这个班级也只是一个包装工具'对于查询。这被认为是管理设置的好方法吗?我很乐意听到一些建议
答案 0 :(得分:1)
我使用的是这种解决方案,它在某些网络应用中对我很有用。
根据我的经验,当你开始在其中设置越来越多的设置时,对该表的查询数量和执行时间会增加,所以我通常为此目的制作某种内存缓存(如果框架没有这样做)为了你)。即使有人会说索引 option_name 会使查询无关紧要,但在分析方面,可以看到它们的影响。
该缓存在启动时填充,并在 setValue (和插入)上刷新,因此不需要在 getValue 上发出选择。唯一的问题是,如果您通过DB(或迁移脚本)手动更改值,则需要刷新缓存。单个应用程序的多个节点使这更加麻烦,但它可以完成。
即便如此,如果你的应用程序需要这种动态配置更改,或者你在应用程序的多个实例上有多个设置我会说它。您具有运行时灵活性,数据库转储将捕获这些设置,因此您不必从某些外部文件中提取它。
P.S。很抱歉,这是我在StackOverflow上的第一个答案。玩得开心!