pdo,将php对象插入数据库

Eri*_*ica 2 php mysql pdo object

我找不到这个问题的答案。

我想将一个PHP对象保存到MySQL数据库中。例:

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 the 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 queries for insert, update and delete 
  //but mysq_query is old and deprecated
}

}
Run Code Online (Sandbox Code Playgroud)

我要求这样做的主要原因是因为我不想编写默认情况下可以存在的东西。

谢谢。

Jon*_*Jon 6

我可能会在user类中实现insert,update和delete方法,而不是使其成为数据库类的功能来解释提供给它的对象。

在PHP或mysql PDO类中没有内置的方法可以执行此操作,但是某些框架实现了ORM(对象关系映射),可让您轻松地在对象类中指定它们与数据库的交互方式。(Laravel框架ORM文档

这是实现它的一种非常基本的方法。

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 从OOP角度来看,这没有任何意义。从ORM扩展用户就像从银行扩展用户一样。用户不是银行的“类型”。遵循“狗扩展动物”逻辑。但是,您将需要一个柜员与用户和银行进行交互。同样,您需要一个“数据映射器”类来从对象中获取信息并将其存储在数据库中。对数据映射器进行更多研究,尽管设置和映射属性到数据库需要花费一些工作,但是它们具有很高的可重用性。 (9认同)