2017-02-07 4 views
1

PHP Webアプリケーション用のmysqlデータベーステーブル "settings"にいくつかの設定が保存されています。この表には、単に「option_name」と「option_value」という2つの列があります。私は(通常のチェックボックスで変更されている)を取得または、これらの設定を変更するには、クラスを構築してきましたし、それは良いアプローチと考えられる場合、私は思っていた:データベースに保存されているPHPアプリケーション設定を管理する

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)]; 
    } 
} 

この方法でメソッドを使用するたびに、クエリデータベースに送信されます。また、クラスはクエリの単なるラッパーです。これは設定を管理する良い方法と考えられますか?

+3

詳細についてはわかりません。いくつの設定がありますか?私はそれらを一度にロードするでしょう。 – jeroen

答えて

1

私はその種のソリューションを使用していましたが、それはいくつかのWebアプリケーションで私にとって本当にうまく機能しました。

私の経験では、そのテーブルへのクエリの種類が増え、実行時間が増えて設定が増えたため、通常はそのような目的でメモリキャッシュを作成していましたそれはあなたのためです)。 というオプション名の索引付けは、問合せを重要視しないと言う人もいますが、プロファイリング側ではその影響が分かります。キャッシュは、起動時に充填し、のsetValue(および挿入)でリフレッシュので、選択はのgetValueに発行する必要はありません取得することを

。 DB(またはマイグレーション・スクリプト)を介して値を手動で変更すると、キャッシュをリフレッシュする必要があるという問題のみです。 1つのアプリケーションの複数のノードでこれをさらに面倒にすることはできますが、それは可能です。

でも、アプリケーションにこのような動的な設定変更が必要な場合や、アプリの複数のインスタンスに複数の設定がある場合は、それを実行してください。実行時の柔軟性があり、データベース・ダンプはこれらの設定を取り込み、外部ファイルから取り出す必要はありません。

P.S.長い答えを申し訳ありません、これは私の最初のStackOverflowです。楽しむ!

+0

ありがとう、本当に役に立ちました – Egidiux

関連する問題