基礎模型類

代碼展示

數據庫操作類

<?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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章