2014-01-15 478 views
1

我無法找到這個問題的答案。pdo,將php對象插入數據庫

我想保存到mysql數據庫的一個php對象。例如:

class user{ 
    private $id, $email, $pw, $first, $last, $group,.....; 
// getters and setters  
} 

class someclass{ 

public function someFunction(){ 
    $pdo = new PDO(...); 
    $objUser = new user(); 
    $objUser->setEmail(....); 
    $objUser->setFirst(....); 
    //bla bla bla 

// and i want to save this user object to DB with something like: 
    $pdo->insert($objUser); //in this case db table equals to class name 
    //instead of building/writing query manually. 
    //for mysql_query i have made a class for building query for insert update delete 
    //but mysq_query is old and deprecated 
} 

} 

我要求這樣做的主要原因是因爲我不想寫一些可以默認存在的東西。

謝謝。

+0

您可以利用'serialize/unserialize'內建函數。但你做錯了 – Yang

+0

@DavidY什麼是錯的? –

回答

4

我可能會在user類中實現插入,更新和刪除方法,而不是將它作爲數據庫類的一個功能來解釋賦予它的對象。

在PHP或mysql PDO類中沒有這樣做的內置方法,但是一些框架實現了一個ORM(對象關係映射),它允許您在對象類中輕鬆指定它們如何與數據庫進行交互。 (Laravel framework ORM docs

以下是您可以實現它的一種非常基本的方法。

class ORM { 
    public function insert($pdo) { 
     // Get object name 
     // Get object properties 
     // Check if database table exists with object name 
     // Generate and run a query to insert a record into that table 
     // using the property names and values 
    } 
    public function update($pdo) { 
     // Like insert, but update 
    } 
    public function delete($pdo) { 
     // Etc... 
    } 
} 

class user extends ORM { 
    private $id, $email, $pw, $first, $last, $group,.....; 
    // getters and setters  
} 

class someclass{ 
    public function someFunction(){ 
     $pdo = new PDO(...); 
     $objUser = new user(); 
     $objUser->setEmail(....); 
     $objUser->setFirst(....); 
     //bla bla bla 

     $objUser->insert($pdo); 
    } 
} 
+0

看起來不錯,非常感謝 –

+0

@ErikKubica不用擔心,如果它回答你的問題,你可以把它標記爲接受? – Jon

+0

哦,是的:-)對不起,ia忘記了 –