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