如何使用PDO从PHP中获取数据库中的参数

时间:2013-09-09 02:58:49

标签: php mysql class pdo

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

首先,我添加了一个db.php文件,其中数据库已配置并连接,之后我将参数添加为私有属性。为了更好地处理它们,所有都包含在一个数组中,所以我在变量'consulta'中构建查询,处理信息并逐个检索db中的值

<?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;

    }

   }

    ?>

我有什么不对吗?

3 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分: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

}

答案 2 :(得分:-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);

}