Ste*_*ven 3 php mysql database settings
目前我的所有脚本设置都位于我包含的PHP文件中.我正在将这些设置(大约100个)移动到名为"settings"的数据库表中.但是我很难找到一种有效的方法来将所有这些检索到文件中.
设置表有3列:
两个示例行可能是:
admin_user john
admin_email_address john@example.com
Run Code Online (Sandbox Code Playgroud)
我能想到检索每个设置的唯一方法是这样的:
$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'];
Run Code Online (Sandbox Code Playgroud)
等等
这样做会占用大量代码并且可能会很慢.
有没有更好的办法?
100个设置?一次加载它们.这将花费时间.你绝对不想一次加载一个.
$result = mysql_query('SELECT * FROM settings');
$settings = array();
while ($row = mysql_fetch_assoc($result)) {
$settings[$row['name']] = $row['value'];
}
Run Code Online (Sandbox Code Playgroud)
如果你需要以某种方式划分这些,取决于你需要怎么做,你可以在表上放置一个类别或东西,然后只加载特定类别中的所有设置.
我建议将其抽象为某种对象的背后:
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];
}
}
Run Code Online (Sandbox Code Playgroud)
这样,在您尝试访问设置之前,不会加载设置:
$settings = new Settings;
echo $settings->admin_name; // now they're loaded
Run Code Online (Sandbox Code Playgroud)