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


PHP use object to store other object into database PDO

我在学习oop时有点迷路了。无论如何,这不是最终的代码,但我只是试图学习如何使用另一个对象将对象存储到数据库中。

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

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"
}

我不知道如何访问这些。有人能解释一下我错过了什么吗?

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

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)"