2011-10-04 75 views
1

我的表设置是这样的:如何使用PHP从MySQL数据库查询这些信息?

id | config_name | config_value

1 |语言|英语
2 |货币| $
3 | date_format | M d,Y
etc ...

我想查询数据库以便在整个页面中根据需要使用此信息。此表中可能有100行,但我只需要在页面上使用特定的行。这就是为什么我需要指定我使用的是哪一个。例如:

$ config-> language;会回显“英文”
$ config-> currency;会回显“$”等。

我该如何设置?

我知道如何获得的价值和在while循环一遍遍回响同样的事情:

$systemconfig = mysql_query("SELECT config_name, config_value FROM system_config");    

    while($configs = mysql_fetch_array($systemconfig)) { 
     echo "The value of ".$configs['config_name']."is: ".$configs['config_value']; 

    } // end while 

...但我不想停留在这个循环,因为它的周期通过数据库中的所有配置。这就是为什么我希望能够回显我在整个页面指定的具体配置值,如上所述,即:$ config->语言

有人能够启发我吗?

+1

你明白,想'组$ config-> language'你暗示你想创建一个“配置”对象,然后只需使用从数据库中提取的任何值填充该对象内部的变量语言即可。这里有问题吗?只需创建对象,循环遍历元素并使用。 – Jakub

+0

是的,这就是我一直在尝试做的事情,但我无法实现。任何对此的帮助将非常感谢! – Oseer

回答

1

嗯,这是非常简单的,你必须走自己通过思维过程:

  • 与连接,并抓住配置信息
  • 在需要的时候调用该对象的构造函数创建一个对象。

这是一个粗略的对象的实例(你所需要的代码填写):

<?php 
class config 
{ 
    protected $self = array(); 

    function __construct() // a constructor runs on initialization of object 
    { 
     $q = mysql_query("SELECT config_name, config_value FROM system_config");    

     while($configs = mysql_fetch_array($q)) { 
      $this->add($configs['config_name'], $configs['config_value']); 

     } 
    } 

    function add($key, $value){ 
     $this->self[$key] = $value; 
    } 

    function __get($name = null) { // this is a getter that you call 
     if(isset($this->self[$name])){ 
      return $this->self[$name]; 
     } 
     return false; // this is returned if element doesn't exist 
    } 
} 

$config = new config; 
echo $config->language; 
?> 
+0

感谢您发布此信息。现在我该怎么做“mysql stuff here”区域?从system_config选择*获取数组或东西? – Oseer

+0

我不知道我在做什么对象/类。这段代码是我接近我的解决方案的最接近的代码,但我无法想象得到一小段代码来告诉我要做什么并使其工作。我插入了一些显然不起作用的SQL东西,但我不知道该怎么办。 – Oseer

+0

@ user971230,我已经更新了代码,这应该与构造函数和getter非常完整。基本上,我创建一个对象,在初始化时,连接到数据库,获取所有的字段,将它们打包到一个数组中(包含在对象中),然后调用'__get'函数来获取元素,像'$ config- > language'和language是通过'__get($ name)'函数获取的名称。如果该名称不存在,则返回false。 – Jakub

0

使用mysql_fetch_object

更好的办法

function getConfig($what) 
{ 
    $qry = "SELECT `config_name` AS `name` , `config_value` AS `value` 
      FROM `system_config` WHERE `config_name`=$what"; 
    $reslt = mysql_query($qry); 
    return mysql_fetch_object($result); 
} 

$config = getConfig('language'); 
while($row=$config) 
{ 
    echo $config->name; 
    echo $config->value; 
} 
+0

这看起来像我在找什么!只有,我试过echo $ config-> language;使用链接中显示的示例,它不会回显任何内容。 – Oseer

+0

尝试使用var_dump($ config)进行调试;'告诉我它显示的是什么 – diEcho

+0

如果我使用echo $ config - > $ config_value,则会得到表中的所有值。我试图回显特定的行。 – Oseer

1

要么你取的一切,或者你有提前知道您将要使用在页面什么配置值,只有那些取。

否则,你会遇到必须制作一个自动加载对象,该对象将在访问该选项时获取/缓存每个配置值。

0

您必须将$ config作为key => value数组,其中键为配置名称,值为配置值。

然后,如果你坚持要使用对象符号,你可以在类的构造函数“倾倒”的分配$ config数组使用键作为变量名称类属性的值,用extract()

相关问题