Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 理解PDO类初始化_Php_Mysql_Pdo - Fatal编程技术网

Php 理解PDO类初始化

Php 理解PDO类初始化,php,mysql,pdo,Php,Mysql,Pdo,我有一个包含一些实例变量的类: class MyClass { public $id; public $name; } 以及一个mysql表,其中包含上述字段+一些额外字段,如更新的。我尝试使用pdo实例化上述类的对象,并使用以下代码将它们转换为json数组: $statement = $pdo->prepare('SELECT * FROM `mytable`'); $statement->execute(); $statement->setFetchMod

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

class MyClass
{
    public $id;
    public $name;
}
以及一个mysql表,其中包含上述字段+一些额外字段,如更新的。我尝试使用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>"}]
[{“id”:5,“name”:“a name”,“updated_at:”,“created_at:”}]
这是怎么回事?最好的避免方法是什么?
提前感谢。

为什么您需要这个类?数据在实际打印出来之前会被修改您的
SELECT*FROM mytable
没有对返回的列进行任何限制。。。
*
意味着获取所有列,并且仅仅因为您在类中定义了一些属性,并不会自动让数据库知道您只需要与这些属性名称匹配的列。如果您只想返回id和name,那么您的SQL语句需要强制执行。是的,但是PDO如何设置类定义中不存在的对象变量呢?我是PHP新手,想知道这是怎么回事。PDO可以设置新的对象属性,因为PHP只需给对象属性赋值,就可以创建新的对象属性。谢谢!比我将15个字段的名称写入语句的方法要好得多:>当然,如果您的表中有与列名不匹配的属性,它仍然可能会导致问题,但它可以为您简化事情
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`'
        );
        ....
    }
}