php - 如何有效地检索大量数据库设置作为 PHP 变量?

标签 php mysql database settings

目前我的所有脚本设置都位于我“包含”的 PHP 文件中。我正在将这些设置(大约 100 个)移动到名为“设置”的数据库表中。但是,我正在努力寻找一种有效的方法将它们全部检索到文件中。

设置表有 3 列:

  • ID(自增)
  • 姓名
  • 值(value)

两个示例行可能是:

admin_user            john
admin_email_address   john@example.com  

我能想到的检索每个设置的唯一方法是这样的:

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

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

等等等等

这样做会占用大量代码并且可能会很慢。

有没有更好的办法?

最佳答案

100 个设置?一次加载它们。那根本不需要时间。您绝对不想一次加载一个。

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

如果您需要以某种方式对这些进行划分,具体取决于您的操作方式,您可以在表格中放置一个类别或其他内容,然后只加载特定类别中的所有设置。

我建议将其抽象为某种对象:

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

这样,在您尝试访问一个设置之前不会加载设置:

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

关于php - 如何有效地检索大量数据库设置作为 PHP 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2532655/

相关文章:

php - Zend/Db/Sql/columns 中的新 Zend 框架更改会导致问题

php - 如何使用pdo驱动程序从php中的本地文件加载数据

javascript - 根据下拉选择填充文本字段

sql - 计算 DISTINCT ID 的数量,但仅当表中存在多个记录时

sql - 关于传感器/读取/警报数据库设计的意见

java - 将句子存储在数据库中

php - 注销时重定向并显示 "You have successfully logged out!"

php - 使用 php/mysql 在 googlemaps 上动态绘制折线

java - 如何在 java play 2.5 中创建带有内存数据库的虚假应用程序?

php - 如何获取数据库的内容而不是索引