【问题标题】:Manage php application settings stored in database管理存储在数据库中的 php 应用程序设置
【发布时间】:2017-06-24 19:00:54
【问题描述】:

我有一些设置存储在 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)];
    }
}

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

【问题讨论】:

  • 没有更多信息很难说。有多少种设置?我可能会一次加载它们。

标签: php database class settings


【解决方案1】:

我正在使用这种解决方案,它在一些网络应用中对我来说非常有效。

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

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

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

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

【讨论】:

  • 谢谢,真的很有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 2017-03-01
  • 2014-04-02
相关资源
最近更新 更多