我在学习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)"