PHP使用对象将其他对象存储到数据库PDO中

时间:2016-08-20 02:00:29

标签: php

我试图学习OOPHP有点失落。这不是最终的代码,但我只是想学习如何使用另一个对象将对象存储到数据库中。

我读到我应该将传递的对象转换为数组,所以我只是对它进行类型转换,但我不想使用

class ObjectStorage {
    private $myObject;

    function __construct($object) {
        $this->myObject = (array)$object;
    }

    function __get($attribute) {
        return var_dump($this->$attribute);
    }

    public function saveVideo($conn) {
        $sql = "INSERT INTO videos (`src`, `title`, `desc`, `cat_id`) VALUES (?, ?, ?, ?)";
        $query = $conn->prepare($sql);
        $query->execute($this->myObject);

        echo "Video Saved!";
}

}

当运行get来查看myObject中的内容时,我得到了这个

array(4) {
    ["Videosrc"]=>
    string(4) "Test"
    ["Videotitle"]=>
    string(5) "Title"
    ["Videodesc"]=>
    string(4) "Desc"
    ["Videocat"]=>
    string(3) "Cat"
}

我无法弄清楚如何访问它们。有人可以解释我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

以下内容应该

只需更改构造函数即可 如果您的数据库列以对象属性名称命名。

function __construct($object) {
    $bind = array();
    foreach($object as $prop => $val) {
        $bind[":$prop"] = $val;
    }
    $this->myObject = $bind;
}

在您的示例中,您的对象道具的名称与数据库列的名称不同,因此,由于PDO准备数组键必须映射数据库列,因此您可以执行以下操作。

function __construct($object) {
    $bind = array();
    $bind[':src'] = $object->Videosrc;
    $bind[':title'] = $object->Videotitle;
    $bind[':desc'] = $object->Videodesc;
    $bind[':cat_id'] = $object->Videocat;
    $this->myObject = $bind;
}

你的INSERT查询看起来应该是这样的

"INSERT INTO videos (`src`, `title`, `desc`, `cat_id`) VALUES (:src, :title, :desc, :cat_id)"