【问题标题】:How do I query this information from a MySQL database using PHP?如何使用 PHP 从 MySQL 数据库中查询这些信息?
【发布时间】:2011-10-04 17:54:38
【问题描述】:

我的桌子是这样设置的:

标识 |配置名称 |配置值

1 |语言 |英文
2 |货币 | $
3 |日期格式 | M d, Y
等等……

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

$config->language; 会回显“English”
$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->language

有人可以启发我吗?

【问题讨论】:

  • 您明白,想要$config->language 意味着您想要创建一个“配置”对象,然后只需使用您从数据库中提取的任何值填充该对象内的变量语言。这里有问题吗?只需创建对象,循环遍历元素并使用。
  • 是的,这就是我一直在尝试做的,但我无法让它发挥作用。对此的任何帮助将不胜感激!

标签: php mysql


【解决方案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;
?>

【讨论】:

  • 感谢您发布此信息。现在我在“这里的mysql东西”区域做什么? select * from system_config...fetch array 什么的??
  • 我不知道我在用对象/类做什么。这段代码是我最接近我的解决方案的代码,但我似乎永远无法获得完整的代码来告诉我该做什么并让它工作。我插入了一些显然不起作用的 SQL 东西,但我不知道还能用它做什么。
  • @user971230,我已经更新了代码,构造函数和吸气剂应该非常完整。本质上,我创建了一个对象,该对象在初始化时连接到数据库,获取所有字段,将它们放入一个数组(包含在对象中),然后调用 __get 函数来获取元素,引用如下 $config-&gt;language 和language 是通过__get($name) 函数获取的名称。如果该名称不存在,则返回 false。
  • 谢谢谢谢谢谢你到目前为止的帮助......最后一个减速带......我得到了意想不到的 T_VARIABLE,期待 $self = array(); 线上的 T_FUNCTION 跨度>
  • @user971230,我们去Stack Overflow Chat,我又更新了我的代码,错字。
【解决方案2】:

要么您获取所有内容,要么您必须提前知道您将在页面中使用的配置值并仅获取这些值。

否则,您将不得不制作一个自动加载对象,该对象将在访问选项时获取/缓存每个配置值。

【讨论】:

    【解决方案3】:

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

    如果你坚持使用对象表示法,你可以在类构造函数中使用extract() 将 $config 数组的值“转储”为类属性,使用键作为变量名。

    【讨论】:

      【解决方案4】:

      使用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;
      }
      

      【讨论】:

      • 这看起来像我要找的东西!只是,我尝试了什么 echo $config->language;使用链接中显示的示例,它没有回显任何内容。
      • 尝试使用var_dump($config); 进行调试并告诉我它显示了什么
      • 如果我回显 $config->$config_value,我会回显表中的所有值。我正在尝试回显特定的行。
      • 这看起来不错,但我必须对每一行进行单独的查询。上面 Jakub 提供的建议听起来像是我一直在努力实现的目标,但是一旦我开始使用对象,事情就有点过头了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多