2016-08-20 90 views
1

我有點迷路,試圖學習OOPHP。這不是以任何方式最終確定的代碼,但我只是想了解如何使用另一個對象將對象存儲到數據庫中。PHP使用對象將其他對象存儲到數據庫PDO

我讀,我應該將對象轉換被傳遞到一個數組,所以我只是強制轉換,但我不想使用

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

}

當運行能看到什麼是myObject我得到這

array(4) { 
    ["Videosrc"]=> 
    string(4) "Test" 
    ["Videotitle"]=> 
    string(5) "Title" 
    ["Videodesc"]=> 
    string(4) "Desc" 
    ["Videocat"]=> 
    string(3) "Cat" 
} 

我想不出如何訪問這些。有人能解釋我錯過了什麼嗎?

回答

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

哦,我的對象有貓,而不是CAT_ID,如果我改變屬性CAT_ID並添加foreach循環它會工作? –

+0

編輯答案,你應該修改也插入查詢。而你的評論似乎認爲你的對象的屬性如:'Videosrc'而不是'src',所以在這種情況下你必須使用第二個選項。 –

+0

那麼對象的實際屬性是src,title,desc,cat,但是當我將它轉換爲數組時,它將類名添加到前端,因爲它們受到保護。嘗試訪問$ object-> src不起作用。我是否需要公開這些屬性,這會很糟糕,是嗎?一般公共道具可能不是第一選擇的 –