代碼展示
數據庫操作類
<?php class MyPDO { private static $instance; //保存對象 private $host; //主機地址 private $dbname; //數據庫名字 private $port; //端口 private $user; //用戶名 private $pwd; //密碼 private $charset; //字符集 private $link; //連接對象 private function __construct($data){ $this->initParam($data); $this->getPDO(); $this->errorMode(); } private function __clone(){ } //獲取單例 public static function getInstance($data=array()){ if(!self::$instance instanceof self){ return self::$instance=new self($data); } return self::$instance; } //初始化參數 private function initParam($data){ $this->host=isset($data['host'])?$data['host']:'localhost'; $this->dbname=isset($data['dbname'])?$data['dbname']:'my_db'; $this->port=isset($data['port'])?$data['port'] : '3306'; $this->user=isset($data['user'])?$data['user']:'root'; $this->pwd=isset($data['pwd'])?$data['pwd']:'root'; $this->charset=isset($data['charset'])?$data['charset']:'utf8'; } //顯示錯誤 private function showError($e,$sql=null){ echo "錯誤信息".$e->getMessage()."<br>"; echo "錯誤代碼".$e->getCode()."<br>"; echo "錯誤文件".$e->getFile()."<br>"; echo "錯誤行號".$e->getLine().'<br>'; if($sql!=null){ echo "錯誤sql語句".$sql; } } //連接數據庫 private function getPDO(){ try { $this->link= new PDO("mysql:host={$this->host};port={$this->port};dbname={$this->dbname};charset={$this->charset}","{$this->user}","{$this->pwd}"); } catch (PDOException $e) { $this->showError($e); exit; } } //設置錯誤模式 private function errorMode(){ $this->link->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } /** * 增刪改功能 * @param string sql語句 * @return int 受影響的行數 */ public function exec($sql){ try { return $row=$this->link->exec($sql); } catch (PDOException $e) { $this->showError($e,$sql); exit; } } /** * 獲取二維數組結果集 * @param string sql * @return PDOStatement 結果集 */ public function fetchAll($sql){ try{ $stmt=$this->link->query($sql); return $stmt->fetchAll(); }catch(PDOException $e){ $this->showError($e,$sql); } } /** * 獲取一維數組結果集 *@param string sql *@return PDOStatement 結果集 */ public function fetch($sql){ try { $stmt= $this->link->query($sql); return $stmt->fetch(); } catch (PDOException $e) { $this->showError($e,$sql); } } /** * 獲取單行單列 * @param string sql * @return mixed 內容 */ public function fetchColumn($sql){ try { $stmt=$this->link->query($sql); return $stmt->fetchColumn(); } catch (PDOException $e) { $this->showError($e,$sql); } } //轉賬事務操作 public function beginTransction($sql_out,$sql_in){ try { $this->link->beginTransaction(); $out=$this->link->exec($sql_out); $in=$this->link->exec($sql_in); if($out && $in){ $this->link->commit(); echo "轉賬成功"; }else{ $this->link->rollBack(); } } catch (PDOException $e) { $this->showError($e); } } }
Mybank模型類
<?php //加載Model基礎模型類 require './Model.class.php'; //轉賬模型類,有多麼功能就封裝什麼方法就行 class Mybank extends Moudel { //基礎模型類中 已經繼承到方法直接用就行 //定義轉賬方法 public function zhuanZ($out,$in,$money){ //這裏的$this->pdo 就是父類基礎模型下的pdo return $this->pdo->beginTransction("update my_bank set money=money-$money where carNo=$out","update my_bank set money=money+$money where carNo=$in"); } }
基礎模型類 所有模型類的父類
<?php /** * 基礎模型類,其他模型類繼承此類 * 所有模型類的父類 */ class Moudel { //定義存儲pdo對象的屬性,要求在子類中可以被訪問; protected $pdo; //構造方法,當子類繼承的時候,直接就初始化pdo的對象 public function __construct(){ //初始化pdo $this->initPDO(); } //初始化pdo對象 protected function initPDO(){ //加載MyPDO類 require './MyPDO.class.php'; $this->pdo=MyPDO::getInstance(); } }
Controller 控制器
<?php //控制器調用視圖 view.html require 'index.html'; //調用Model 模型類; require './Mybank.class.php'; if(!empty($_GET)){ $out=$_GET['out']; $in=$_GET['in']; $money=$_GET['money']; //實例化 Mybank 模型類,閉並調用下面的轉賬方法 $ban=new Mybank(); echo $ban->zhuanZ($out,$in,$money); }
View 視圖
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <form action="" method="get"> 轉出卡號:<input type="text" name="out" id=""><br> 轉入卡號:<input type="text" name="in" id=""><br> 金額:<input type="text" name="money" id=""><br> <input type="submit" value="轉賬"> </form> </body> </html>