2011-10-04 79 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()

相關問題