使用面向对象的PHP从MySQL中提取字符串

时间:2013-07-04 23:11:08

标签: php mysql object

好的,所以我正在慢慢地从Procedural迁移到OOP,除了一件事,我发现这一切都很直接。

我曾经使用这种方法从一个简单的双栏设置表中提取我的设置数据,该表包含每个设置的一行,用'setting'和'value'字段定义:

$query = mysql_query("SELECT * FROM `settings`");
while ($current_setting = mysql_fetch_array($query)) {
    $setting[$current_setting['setting']] = $current_setting['value'];
}

正如您所看到的,我操纵它以便我可以简单地使用$ setting ['any_setting_name']在该设置的行中显示相应的“值”。我不确定这是否是一种愚蠢的做事方式,但无论如何,我还在继续前进..

然而,由于转向面向对象的PHP,我真的不知道如何做类似的事情。

$query = $mysqli->query("SELECT * FROM `settings`");
while ($current_setting = $query->fetch_object()) {
    echo $current_setting->setting; // echo's each setting name
    echo $current_setting->value; // echo's each setting value
}

正如您所看到的,我完全能够检索数据,但我想要的是以后能够以$setting->setting_name;的形式使用它,它将回显来自行的VALUE setting等于'setting_name'..

所以基本上如果我的设置表中有一行setting是'site_url'且value是'http://example.com/',我想要$ setting-> site_url;包含'http://example.com/'..或者具有同样效果的东西..

任何人都可以帮助我吗?我现在正在砖墙上..可能是一些非常愚蠢的东西,我忽略了......

1 个答案:

答案 0 :(得分:0)

由于您正在使用资源,因此它具有指针。一旦你到达终点,你就不能再使用它了。我想你可以重置它,但为什么不把它与旧的混合?

我不认为你会有太多的开销,无论如何重要,做这样的事情:

$settings = array();
$query = $mysqli->query("SELECT * FROM `settings`");
while ($current_setting = $query->fetch_object()) {
     $settings[$current_setting->setting] = $current_setting->value;
}

现在,您可以根据需要使用$settings

<强>更新

没有对此进行测试或使用它,但您是否想要做这样的事情?请考虑以下伪代码,但实际上可能无法正常工作。

$settings = new stdClass();
$query = $mysqli->query("SELECT * FROM `settings`");
while ($current_setting = $query->fetch_object()) {
     $settings->{$current_setting->setting} = $current_setting->value;
}