Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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使用object将其他对象存储到数据库PDO中_Php - Fatal编程技术网

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

PHP使用object将其他对象存储到数据库PDO中,php,Php,我在学习HP时有点迷失了方向。这并不是最终确定的代码,但我只是想学习如何使用另一个对象将一个对象存储到数据库中 我读到应该将传递的对象转换为数组,所以我只是键入它,但我不想使用 class ObjectStorage { private $myObject; function __construct($object) { $this->myObject = (array)$object; } function __get($attribu

我在学习HP时有点迷失了方向。这并不是最终确定的代码,但我只是想学习如何使用另一个对象将一个对象存储到数据库中

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

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

接下来应该做些什么

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

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

哦,我的对象有cat而不是cat\u id,如果我将属性更改为cat\u id并添加foreach循环,它会工作吗?编辑答案,您还应该修改insert查询。对于您的评论,您的对象似乎有属性,例如:
Videosrc
而不是
src
,因此在这种情况下,您必须使用第二个选项。对象的实际属性是src、title、desc、cat,但当我将其键入数组时,会将类名添加到前面,因为它们受到保护。尝试访问$object->src无效。我需要把房子公之于众吗,那很糟糕,是吗?一般来说,公共道具可能不是第一选择。检查这个评论PHP文档get_object_vars Nevermind,它在我删除了?并在编辑中更改为:src、:title、:desc、:cat_id。非常感谢!哦,我的对象有cat而不是cat\u id,如果我将属性更改为cat\u id并添加foreach循环,它会工作吗?编辑答案,您还应该修改insert查询。对于您的评论,您的对象似乎有属性,例如:
Videosrc
而不是
src
,因此在这种情况下,您必须使用第二个选项。对象的实际属性是src、title、desc、cat,但当我将其键入数组时,会将类名添加到前面,因为它们受到保护。尝试访问$object->src无效。我需要把房子公之于众吗,那很糟糕,是吗?一般来说,公共道具可能不是第一选择。检查这个评论PHP文档get_object_vars Nevermind,它在我删除了?并在编辑中更改为:src、:title、:desc、:cat_id。非常感谢!