PHP物件導向之事務指令碼模式

來源:互聯網
上載者:User

標籤:manager   dos   樣本   logs   color   value   uem   function   ted   

/*事務指令碼模式: 類似於thinkphp中的model層,或者說就是操作資料庫的類。個人覺得實踐中使用起來還是挺簡單方便的,就是SQL語句寫死了的話,靈活性就不夠。範例程式碼如下:*/namespace woo\process;abstract class Base{    static $DB;                 //pdo對象    static $stmts = array(); //sql語句控制代碼        function __construct (){        $dsn = \woo\base\ApplicationRegistry::getDSN();        if(is_null($dsn)){            throw new \woo\base\AppException("No DSN");        }        self::$DB = new PDO($dsn);        self::$DB->setAttribute(\PDO::ATTR_ERRMODE,\PDO::ERRMODE_EXCEPTION);    }        function prepareStatement($stmt_s){   //緩衝sql語句控制代碼        if(isset(self::$stmts($stmt_s)){            return self::$stmts[$stmt_s];        }        $stmt_handle = self::$DB->prepare($stmt_s);        self::$stmts[$stmt_s] = $stmt_handle;        return $stmt_handle;    }        protected function doStatement($stmt_s,$values_a){    //執行sql並擷取一個語句資源        $sth = $this->prepareStatement($stmt_s);        $sth->closeCursor();        $db_result = $sth->execute($values_a);        return $sth;    }}//這個類就是向資料庫中寫入一些資料,比較簡單沒什麼好多說的class VenueManager extends Base{    static $add_venue = "INSERT INTO venue (name) values(?)";    static $add_space = "INSERT INTO space (name,venue) values(?,?)";    static $check_slot = "SELECT id,name FROM event WHERE space = ? AND (start+duration)>? AND start <?";    static $add_event = "INSERT INTO event (name,space,start,duration) values(?,?,?,?)";        function addVenue($name,$space_array){        $ret = array();        $ret[‘venue‘] = array($name);        $this->doStatement(self::$add_venue,$ret[‘venue‘]);        $v_id = self::$DB->lastInsertId();        $ret[‘spaces‘] = array();        foreach($space_array as $space_name){            $values = array($space_name,$v_id);            $this->doStatement(self::$add_space,$values);            $s_id = self::$DB->lastInsertId();            array_unshift($values,$s_id);            $ret[‘spaces‘][] = $values;        }        return $ret;    }        function bookEvent ($space_id,$name,$time,$duration){        $values = array($space_id,$time,($time+$duration));        $stmt = $this->doStatement(self::$check_slot,$values,false);        if($result = $stmt->fetch()){            throw new \woo\base\AppException("double booked! try again");        }        $this->doStatement(self::$add_event,array($name,$space_id,$time,$duration));    }}//用戶端,使用起來還是比較簡便的$venue =  new VenueManager();$venue->addVenue(‘test‘,array(‘test1‘,‘test2‘,‘test3‘));

 

PHP物件導向之事務指令碼模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.