我试图学习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"
}
我无法弄清楚如何访问它们。有人可以解释我错过了什么吗?
答案 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)"