2013-10-13 4 views
0

У меня есть класс с id, ключевым словом и значением. я выборки данных из таблицы с именем Установка в классе Настройка с помощьюPDO Имена столбцов появляются в классе после fetchAll

if ($stmt->execute()) { 
    $o = $stmt->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, "Setting", array('id', 'keyword','value')); 
} 

Когда я смотрю на содержание $ O я вижу следующее

Array ([0] => Setting Object ([id] => id [keyword] => keyword [value] => value [Id] => 1 [Keyword] => AdminMail [Value] => [email protected])) 

Мой класс выглядит следующим образом

class Setting { 
var $id; 
var $keyword; 
var $value; 

function __construct($id,$ke,$va) { 
    $this->id = $id; 
    $this->keyword = $ke; 
    $this->value = $va; 
} 

public function getKeyword() { 
    return $this->keyword; 
} 

public function getValue() { 
    return $this->value; 
} 
} 

Ожидает, что $ o-> getValue возвращает [email protected], но возвращает значение.

Может кто-нибудь сказать мне, почему «[id] => id [keyword] => keyword [value] => value" появляется перед фактическим выходом из моей таблицы?

+0

Проблема была в команде fetchAll. Имена в массиве ('id', 'key', 'value') были не такими, как в таблице, в которой я запрашивал. –

ответ

0

Я понятия не имею, почему этот сложный синтаксический сахар настолько привлекателен.
Как это лучше, чем обычный, простой и читаемый код, как это:

function __construct($init) { 
    $this->id  = $init['id']; 
    $this->keyword = $init['ke']; 
    $this->value = $init['va']; 
} 
... 
$stmt->execute(); 
$o = new Settings($stmt->fetchAll()); 
+0

Не работает. Я получаю пустой объект Setting с любыми данными в нем. –

+0

Ну, этот код не предназначался для копирования, а скорее для обычного и обычного способа инициализации объектов. Вы знакомы с ним? Вы понимаете код, который я разместил? –

+0

Если я правильно понял код, $ stmt-> fetchAll() должен сгенерировать массив, который передается конструктору, который устанавливает все поля в значение в массиве. Это верно? –