我正在开发一个安装类来管理存储在数据库中的一些参数,我正在尝试使类有效且更短,所以,我这样做了:
首先,我添加了一个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;
}
}
?>
我有什么不对吗?
答案 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);
}