0

我正在开发一个设置类来管理存储在数据库中的一些参数,并且我正在尝试使一个类有效且更短,所以我这样做了:

首先,我添加了一个配置和连接数据库的 db.php 文件,然后我将参数添加为私有属性。为了以更好的方式处理它们,所有这些都包含在一个数组中,所以我在变量“consulta”中构建查询,处理信息并从数据库中一一检索值

<?php
  require 'db.php';

  class setup {
private $lenguaje;
private $charset;
private $sitio_titulo;
private $sitio_descripcion;
private $kewords;
private $autor;
private $path_css_frontend;
private $path_css_backend;
private $path_modernizr;
private $path_jquery;
private $logo_url;
private $copyright;
private $dbconn;
private $site_version;

//edit - 代码分离仅用于可见性,属于同一类

    public function __construct() {
    $this->dbconn = new database ();
}
private function fillData() {
    $valores = array (
            lenguaje,
            charset,
            sitio_titulo,
            sitio_descripcion,
            kewords,
            autor,
            path_css_frontend,
            path_css_backend,
            path_modernizr,
            path_jquery,
            logo_url,
            copyright,
            dbconn,
            site_version
    );
    $this->getData($valores);
}

//edit - 代码分离仅用于可见性,属于同一类

public function getData($columnName) {

    while($columnName){

        $consulta = 'SELECT $columnName from config LIMIT 1';

        $this->dbconn->query ( $consulta );

        $this->dbconn->execute ();

        $r = $this->dbconn->fetch (); //

        '$this->'.$columnName = $r;

    }

   }

    ?>

我有什么问题吗?

4

3 回答 3

2

当然。
你只是设法让它变得漫长而无效。
这是一个改进的版本:

<?php
require 'db.php';
$dbconn = new database();

class setup
{
    public function __construct($dbconn)
    {
        $this->dbconn = $dbconn;
        $this->fillData();
    }

    private function fillData()
    {
        $data = $this->getData();
        foreach ($data as $key => $value)
        {
            $this->$key = $value;
        }
    }
    private function getData()
    {
        $sql = 'SELECT * FROM config';
        return $this->dbconn->query($sql)->fetchAll(PDO::FETCH_ASSOC);
    }
}
于 2013-09-09T03:06:07.293 回答
0

首先引用数组的值,否则它们将被视为常量。

$valores = array (
            'lenguaje',
            'charset',
            'sitio_titulo',
            'sitio_descripcion',
            'kewords',
            'autor',
            'path_css_frontend',
            'path_css_backend',
            'path_modernizr',
            'path_jquery',
            'logo_url',
            'copyright',
            'dbconn',
            'site_version'
    );

接下来,您使用 while 循环的方式是错误的。组合数组值并发送一个查询。

public function getData($columnName) {

    $columnName = implode(",", $columnName);
    $consulta = 'SELECT $columnName from config LIMIT 1';

    // Query Now

}
于 2013-09-09T03:04:32.617 回答
-1

最后,我改变了表格的架构,让班级更容易获得参数

<?php
    require 'db.php';

    class setup {

      public function __construct() {

    $this->dbconn = new database ();

      }

      public function getParameter($p) {

    $sql = 'SELECT param_value from parameters where param_name = :par';

    $this->dbconn->query($sql);

    $this->dbconn->bind(':par', $p);

    $r = $this->dbconn->getSingleRecord();

    return $r['param_value'];
}

?>

文件 db.php 中的解决方案涉及以下函数

public function query($query) {

    if ($this->isConnected == False) {

        $this->Connect ();

    } else {

        $this->q = $this->pdo->prepare ( $query );

    }
}


public function bind($param,$value,$type = NULL){

    if (is_null($type)) {

        switch (true) {
            case is_int($value):
                $type = PDO::PARAM_INT;
                break;
            case is_bool($value):
                $type = PDO::PARAM_BOOL;
                break;
            case is_null($value):
                $type = PDO::PARAM_NULL;
                break;
            default:
                $type = PDO::PARAM_STR;
        }
    }

    $this->q->bindValue($param,$value,$type);

}

  public function getSingleRecord(){

    $this->execute();

    return $this->q->fetch(PDO::FETCH_ASSOC);

}
于 2013-09-10T03:32:08.263 回答