この記事では、主に ORM メソッドに基づいて MySQL データベースを操作するための PHP を紹介し、MySQL データベースの一般的な操作のための PHP のカプセル化と使用スキルを具体的な例の形式で分析します。詳細は次のとおりです。以下の通り:
ORM--- - オブジェクト指向アプローチを使用してデータベースを操作する指向リレーションシップ マッパー。結局のところ、それは依然として SQL ステートメントのカプセル化に関するものです。
まず第一に、私たちのデータベースには次のテーブルがあります:
setUserid("11111") を使用してこのテーブルのユーザー ID を設定したいと考えています。 getUserid() はオブジェクトのユーザー ID も取得できます。したがって、データベース内のテーブルに対応するモデル オブジェクトを作成する必要があります。
各テーブルに対応するモデルはset/get操作を持つ必要があるため、親クラスBasicModelを使用して定義します。他のモデルはこのモデルを継承します。
BasicModelのコードは以下の通りです。
<?php /* * author:Tammy Pi * function:Model类的基类,封装set/get操作 */ class BasicModel{ private $map = null; function TbUser() { $this->map = array(); } function __set($key,$value){ $this->map[$key] = $value; } function __get($key){ return $this->map[$key]; } function __call($name,$arguments) { if(substr($name,0,3)=='set'){ $this->__set(strtolower(substr($name,3)),$arguments[0]); }else{ return $this->__get(strtolower(substr($name,3))); } } } ?>
そして、tb_userテーブルに対応するモデルクラスTbUserがそれを継承します。
<?php require_once("BasicModel.php"); class TbUser extends BasicModel{ } ?>
このようにして、TbUser のインスタンスに対して set/get 操作を実行できます。
ORM を使用してデータベースを操作するには、オブジェクトの配列を返す findByWhere($where) を使用してクエリを実行できる必要があります。 ) 更新操作を実行します。
基本的に、ユーザーが渡すのはオブジェクトであり、コードを使用してオブジェクトを SQL ステートメントに変換します。基本的に、SQL ステートメントは引き続き実行されます。
そこで、一連の操作を表すためにインターフェースを使用します。 IBasicDAO のコードは次のとおりです:
<?php interface IBasicDAO { public function findByWhere($where); public function findWhereOrderBy($where,$order,$start=null,$limit=null); public function save($obj); public function delete($obj); public function update($obj); } ?>
私たちにとって最も重要なことは、このインターフェイスを実装することです。オブジェクトと SQL の変換を完了します。
BasicDAO コードは次のとおりです:<?php require_once("IBasicDAO.php"); class BasicDAO implements IBasicDAO{ protected $modelName = null; private $tableName = null; private $h = "localhost"; private $user = "root"; private $pass = "root"; private $db = "db_toilet"; //获得连接 public function getConnection(){ $conn = mysqli_connect($this->h,$this->user,$this->pass,$this->db); return $conn; } //初始化 public function init() { //根据model的名字得到表的名字 $this->tableName = strtolower(substr($this->modelName,0,2))."_".strtolower(substr($this->modelName,2)); } //获得一个表的列名 public function getColumn($tableName) { $sql = "show columns from ".$tableName; $conn = $this->getConnection(); $columns = array(); if($conn!=null){ $rtn = mysqli_query($conn,$sql); while($rtn!==false&&($row=mysqli_fetch_array($rtn))!=null){ $columns[] = $row[0]; } mysqli_close($conn); } return $columns; } //条件查询 public function findByWhere($where){ //获得数据表的列名 $columns = $this->getColumn($this->tableName); //拼接sql语句 $sql = "select * from ".$this->tableName." where ".$where; $conn = $this->getConnection(); $arr = array(); if($conn!=null){ $rtn = mysqli_query($conn,$sql); while($rtn!==false&&($row=mysqli_fetch_array($rtn))!=null){ $index = -1; $obj = new $this->modelName(); foreach($columns as $column){ $obj->{"set".ucfirst($column)}($row[++$index]); } $arr[] = $obj; } mysqli_close($conn); } return $arr; } //分页查询;支持排序 public function findWhereOrderBy($where,$order,$start=null,$limit=null){ //获得数据表的列名 $columns = $this->getColumn($this->tableName); //拼接sql语句 $sql = "select * from ".$this->tableName." where ".$where." order by ".$order; if($start!=null&&$limit!=null){ $sql .= "limit ".$start.",".$limit; } $conn = $this->getConnection(); $arr = array(); if($conn!=null){ $rtn = mysqli_query($conn,$sql); while($rtn!==false&&($row=mysqli_fetch_array($rtn))!=null){ $index = -1; $obj = new $this->modelName(); foreach($columns as $column){ $obj->{"set".ucfirst($column)}($row[++$index]); } $arr[] = $obj; } mysqli_close($conn); } return $arr; } //保存操作 public function save($obj){ $columns = $this->getColumn($this->tableName); $conn = $this->getConnection(); $tag = false; if($conn!=null){ $sql = "insert into ".$this->tableName."("; foreach($columns as $column){ $sql .= $column.","; } $sql = substr($sql,0,strlen($sql)-1).") values("; foreach($columns as $column){ $value = $obj->{"get".ucfirst($column)}(); //判断$value的类型 if($value==null){ $sql .= "null,"; }else if(preg_match("/^[0-9]*$/", $value)){ //是数字 $sql .= $value.","; }else{ $sql .= "'".$value."',"; } } $sql = substr($sql,0,strlen($sql)-1); $sql .= ")"; //执行sql语句 mysqli_query($conn,$sql); $tag = true; mysqli_close($conn); } return $tag; } //删除操作 public function delete($obj){ $conn = $this->getConnection(); $tag = false; if($conn!=null){ $sql = "delete from ".$this->tableName." where "; $columns = $this->getColumn($this->tableName); $value = $obj->{"get".ucfirst($columns[0])}(); if($value!=null){ //是数字 if(preg_match("/^[0-9]*$/", $value)){ $sql .= $columns[0]."=".$value; }else{ $sql .= $columns[0]."='".$value."'"; } //执行 mysqli_query($conn,$sql); $tag = true; } mysqli_close($conn); } return $tag; } //更新操作 public function update($obj){ $conn = $this->getConnection(); $columns = $this->getColumn($this->tableName); $tag = false; if($conn!=null){ $sql = "update ".$this->tableName." set "; for($i=1;$i<count($columns);$i++){ $column = $columns[$i]; $value = $obj->{"get".ucfirst($columns[$i])}(); if($value==null){ $sql .= $column."=null,"; }else if(preg_match("/^[0-9]*$/",$value)){ $sql .= $column."=".$value.","; }else{ $sql .= $column."='".$value."',"; } } $sql = substr($sql,0,strlen($sql)-1); $sql .= " where "; $tempColumn = $columns[0]; $tempValue = $obj->{"get".ucfirst($columns[0])}(); if(preg_match("/^[0-9]*$/", $tempValue)){ $sql .= $tempColumn."=".$tempValue; }else{ $sql .= $tempColumn."='".$tempValue."'"; } //执行操作 mysqli_query($conn,$sql); $tag = true; mysqli_close($conn); } return $tag; } } ?>
次に、tb_user テーブルを操作するときに主に使用されるのは TbUserDAO であり、modelName を "TbUser" に設定します。コードは、操作されているテーブルが tb_user であることを認識します。 then it can 一連の操作が実行されました。
<?php require_once("BasicDAO.php"); require_once("../model/TbUser.php"); class TbUserDAO extends BasicDAO{ function TbUserDAO(){ $this->modelName = 'TbUser'; parent::init(); } } ?>
これで、オブジェクト指向でデータベースを操作できるようになります。
例:$tbUserDAO = new TbUserDAO(); $tbUser = new TbUser(); $tbUser->setUserid("fetchingsoft@163.com"); $tbUser->setUsername("fetching"); $tbUserDAO->update($tbUser); echo "执行成功!"; print_r($list);
データベース内のレコードを更新します。
関連する推奨事項:
fphpstorm通常のマッチングを使用して空行とコメント行を削除する方法
以上がPHP が ORM に基づいて MySQL データベースを操作する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。