Nasıl verimli PHP değişkenler olarak veritabanı ayarları çok sayıda alabilirsiniz?

2 Cevap php

Şu anda benim scriptin tüm ayarlarını ben dahil 'bir PHP dosyası bulunmaktadır. Ben 'setting' adında bir veritabanı tablosuna bu ayarları (yaklaşık 100) taşıma sürecinde yaşıyorum. Ancak dosyanın içine hepsini almak etkili bir yol bulmak için mücadele ediyorum.

Ayarlar tablosu 3 sütun vardır:

  • ID (autoincrements)
  • isim
  • değer

İki örnek, satır aşağıdaki gibi olabilir:

admin_user            john
admin_email_address   john@example.com  

Her ayarı almak aklınıza tek yolu bu gibi:

$result = mysql_query("SELECT değer FROM settings WHERE name = 'admin_user'");
$row = mysql_fetch_array($result);
$admin_user = $row['değer'];

$result = mysql_query("SELECT değer FROM settings WHERE name = 'admin_email_address'");
$row = mysql_fetch_array($result);
$admin_email_address = $row['değer'];

vs vs

Bunu bu şekilde yapıyor a lot kodu alacak ve büyük olasılıkla yavaş olacak.

Daha iyi bir yolu var mı?

2 Cevap

100 ayarları? Hepsini aynı anda yükleyin. Yani hiç bir zaman alacaktır. Sen absolutely Bir teker teker yüklemek istemiyorum.

$result = mysql_query('SELECT * FROM settings');
$settings = array();
while ($row = mysql_fetch_assoc($result)) {
  $settings[$row['name']] = $row['value'];
}

Eğer bunu yapmak için gereken ne bağlı olarak, bir şekilde bu bölümlere gerekiyorsa, masanın üzerinde bir kategori ya da bir şey koymak ve sonra sadece belirli bir kategorideki tüm ayarları yüklemek olabilir.

Ne öneriyorsun bazı tür bir nesnenin arkasında bu soyutlayarak edilir:

class Settings {
  private $settings;

  public function __get($name) {
    if (!$this->settings)) {
      $result = mysql_query('SELECT * FROM settings');
      $this->settings = array();
      while ($row = mysql_fetch_assoc($result)) {
        $this->settings[$row['name']] = $row['value'];
      }
    }
    return $this->settings[$name];
  }
}

Denemek ve erişim biri kadar ayarlar yüklü değil bu yol:

$settings = new Settings;
echo $settings->admin_name; // now they're loaded

Peki ben bunu anladım gibi görünüyor:

$settings = mysql_query("SELECT * FROM settings");

while ($row = mysql_fetch_assoc($settings)) {
eval('global $' . $row['name'] . ';');
eval('$' . $row['name'] . ' = "' . $row['value'] . '";');
}

Ben eval (kullanarak düşkün değildi rağmen) çalışır, ama tek yol olduğunu düşünüyorum.

Ben şimdi çok host eval () devre dışı olup olmadığını merak ediyorum. Herhangi bir düşünce?