2016-12-27 28 views
0

我想使用QueryBuilder.php中的save();方法將Product類的實例保存到數據庫中,例如$furniture1。有沒有辦法將一個對象傳遞給它?使用不同類的方法將對象保存到數據庫

是否有可能或有更好的方法來做到這一點?

QueryBuilder.php

class QueryBuilder { 

    /** 
    * @var PDO $pdo 
    */ 
    protected $pdo; 

    /** 
    * Create a new query instance 
    * 
    * @param PDO $pdo 
    */ 
    public function __construct($pdo) { 
    $this->pdo = $pdo; 
    } 

    /** 
    * Save object to database 
    */ 
    public function save($obj, $table) { 
    // gets an associative array 
    $variables = get_object_vars($obj); 

    // arrays 
    $columns = []; 
    $placeholders = []; 
    $bindings = []; 

    // loop through variables and build arrays 
    foreach ($variables as $column => $value) { 
     $columns[] = $column; 
     $placeholder = ':' . $column; 
     $placeholders[] = $placeholder; 
     $bindings[$placeholder] = $value; 
    } 

     // create strings 
    $columnString = implode(',', $columns); 
    $placeholderString = implode(',', $placeholders); 

    // prepare query 
    try { 
     $sql = "INSERT INTO " . $table . " (" . $columnString . ") VALUES (" . $placeholderString . ")"; 
     $query = $this->pdo->prepare($sql); 
     $query->execute($bindings); 
    } catch(PDOException $e) { 
     return $e; 
    } 
    } 

} 

所述對象的屬性的var_dump:

array (size=6) 
    'material' => string 'wood' (length=4) 
    'id' => null 
    'type' => string 'Furniture' (length=9) 
    'title' => string 'Desk' (length=4) 
    'price' => float 199.99 
    'size' => string '200x100x100 cm' (length=14) 

編輯:

var_dump($variables);var_dump($columnString);var_dump($placeholderString);個回報:

QueryBuilder.php:81: 
array (size=0) 
    empty 
QueryBuilder.php:82:string '' (length=0) 
QueryBuilder.php:83:string '' (length=0) 
+0

你試過用這個嗎?你有什麼錯誤嗎? – Xymanek

+0

它沒有做任何事情。數據庫中沒有錯誤和任何內容。 – Rudolph

+0

嘗試刪除try/catch塊並查看是否有任何異常 – Xymanek

回答

2

根據您在評論張貼錯誤,問題是,在你的數據庫架構,你有沒有被添加到SQL查詢的字段。

最有可能的對象屬性受到保護,而get_object_vars()只返回可見屬性。

+0

'var_dump($ variables);'返回空數組,因此傳遞一個對象作爲參數不起作用。 – Rudolph

+0

@Rudolph你的對象是怎樣的? – Xymanek

+0

@Rudolph它不能爲空,因爲你的查詢必須得到類型字段,以匹配你得到的錯誤。 –

相關問題