了解PDO类初始化

时间:2014-03-28 18:58:20

标签: php mysql pdo

我有一个包含一些实例变量的类:

class MyClass
{
    public $id;
    public $name;
}

和一个mysql表,其中包含上述字段 +一些其他字段,例如updated_at。我尝试使用pdo实例化上述类的对象,并使用以下代码将它们转换为json数组:

$statement = $pdo->prepare('SELECT * FROM `mytable`');
$statement->execute();
$statement->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'MyClass');
$objects =  $statement->fetchAll();

echo json_encode( (array) $objects );

现在看来,结果数组还包含其他字段,尽管它们不属于我的类定义:

[{"id": 5, "name":"a name", "updated_at":"<timestamp>", "created_at":"<timestamp>"}]

这怎么可能,最好的方法是避免这种情况? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

class MyClass
{
    public $id;
    public $name;


    protected function setSelection() {
        return implode(
            ',',
            array_map(
                function ($value) {
                    return '`'.$value.'`';
                },
                array_keys(get_object_vars($this))
            )
        );
    }

    public function getData() {
        ....
        $statement = $pdo->prepare(
            'SELECT ' . $this->setSelection() . ' FROM `mytable`'
        );
        ....
    }
}