Yaf框架封裝的MySQL數(shù)據(jù)庫(kù)操作示例
本文實(shí)例講述了Yaf框架封裝的MySQL數(shù)據(jù)庫(kù)操作。分享給大家供大家參考,具體如下:
Yaf封裝DB簡(jiǎn)單操作
介紹
因?yàn)閅af是一個(gè)純天然的MVC闊架,本人還在貝銳的時(shí)候就和主管一起用Yaf框架去重構(gòu)了向日葵的網(wǎng)站端,到后面,Yaf也逐漸應(yīng)用到了其他項(xiàng)目上,但是Yaf是沒(méi)有帶DB類庫(kù)的,所以本人也共享下最近封裝的代碼!
代碼
使用PDO封裝MySQL操作
class Db_Mysql { private $_options = array(); private $db; private $statement; private $_fetchMode = 2; /** * 構(gòu)造函數(shù) * * @param string $host * @param string $username * @param string $password * @param string $dbname * @param string $charset */ private function __construct($host, $username, $password, $dbname, $charset) { //初始化數(shù)據(jù)連接 try { $dns = 'mysql:dbname=' . $dbname . ';host=' . $host; $this->db = new PDO($dns, $username, $password, array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_AUTOCOMMIT => 1)); $this->db->query('SET NAMES ' . $charset); } catch (PDOException $e) { echo header("Content-type: text/html; charset=utf-8"); echo '<pre />'; echo '<b>Connection failed:</b>' . $e->getMessage(); die; } } /** * 調(diào)用初始化MYSQL連接 * * @param string $config * @return Aomp_Db_Mysql */ static public function getInstance($config = '') { $host = $config->host; $username = $config->username; $password = $config->password; $dbname = $config->dbname; $charset = $config->charset; $db = new self($host, $username, $password, $dbname, $charset); return $db; } /** * 獲取多條數(shù)據(jù) * * @param string $sql * @param array $bind * @param string $fetchMode * @return multitype: */ public function fetchAll($sql, $bind = array(), $fetchMode = null) { if($fetchMode === NULL){ $fetchMode = $this->_fetchMode; } $stmt = $this->query($sql, $bind); $res = $stmt->fetchAll($fetchMode); return $res; } /** * 獲取單條數(shù)據(jù) * * @param string $sql * @param array $bind * @param string $fetchMode * @return mixed */ public function fetchRow($sql, array $bind = array(), $fetchMode = null) { if ($fetchMode === null) { $fetchMode = $this->_fetchMode; } $stmt = $this->query($sql, $bind); $result = $stmt->fetch($fetchMode); return $result; } /** * 獲取統(tǒng)計(jì)或者ID * * @param string $sql * @param array $bind * @return string */ public function fetchOne($sql, array $bind = array()) { $stmt = $this->query($sql, $bind); $res = $stmt->fetchColumn(0); return $res; } /** * 增加 * * @param string $table * @param array $bind * @return number */ public function insert($table, array $bind) { $cols = array(); $vals = array(); foreach ($bind as $k => $v) { $cols[] = '`' . $k . '`'; $vals[] = ':' . $k; unset($bind[$k]); $bind[':' . $k] = $v; } $sql = 'INSERT INTO ' . $table . ' (' . implode(',', $cols) . ') ' . 'VALUES (' . implode(',', $vals) . ')'; $stmt = $this->query($sql, $bind); $res = $stmt->rowCount(); return $res; } /** * 刪除 * * @param string $table * @param string $where * @return boolean */ public function delete($table, $where = '') { $where = $this->_whereExpr($where); $sql = 'DELETE FROM ' . $table . ($where ? ' WHERE ' .$where : ''); $stmt = $this->query($sql); $res = $stmt->rowCount(); return $res; } /** * 修改 * * @param string $table * @param array $bind * @param string $where * @return boolean */ public function update($table, array $bind, $where = '') { $set = array(); foreach ($bind as $k => $v) { $bind[':' . $k] = $v; $v = ':' . $k; $set[] = $k . ' = ' . $v; unset($bind[$k]); } $where = $this->_whereExpr($where); $sql = 'UPDATE ' . $table . ' SET ' . implode(',', $set) . (($where) ? ' WHERE ' . $where : ''); $stmt = $this->query($sql, $bind); $res = $stmt->rowCount(); return $res; } /** * 獲取新增ID * * @param string $tableName * @param string $primaryKey * @return string */ public function lastInsertId() { return (string) $this->db->lastInsertId(); } public function query($sql, $bind = array()) { if(!is_array($bind)){ $bind = array($bind); } $stmt = $this->prepare($sql); $stmt->execute($bind); $stmt->setFetchMode($this->_fetchMode); return $stmt; } public function prepare($sql = '') { if(empty($sql)){ return false; } $this->statement = $this->db->prepare($sql); return $this->statement; } public function execute($param = '') { if(is_array($param)){ try { return $this->statement->execute($param); } catch (Exception $e) { return $e->getMessage(); } }else { try { return $this->statement->execute(); } catch (Exception $e) { return $e->getMessage(); } } } /** * * @param string $where * @return null|string */ protected function _whereExpr($where) { if(empty($where)){ return $where; } if(!is_array($where)){ $where = array($where); } $where = implode(' AND ', $where); return $where; } /** * 關(guān)閉數(shù)據(jù)庫(kù)操作 */ public function close() { $this->_db = null; } }
配置
db.type = 'mysql' db.host = '127.0.0.1' db.username = 'root' db.password = '123456' db.dbname = 'test' db.charset = 'UTF8'
調(diào)用方法
class TestController extends Yaf_Controller_Abstract { public function indexAction() { $config = Yaf_Application::app()->getConfig()->db; $db = Db_Mysql::getInstance($config); $row = $db->fetchOne('select count(*) from `user`'); print_r($row);die; } }
結(jié)果
更多關(guān)于php框架相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php優(yōu)秀開發(fā)框架總結(jié)》、《codeigniter入門教程》、《ThinkPHP入門教程》、《Zend FrameWork框架入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
- Can''t connect to local MySQL through socket ''/tmp/mysql.sock''解決方法
- Mysql常用函數(shù)大全(分類匯總講解)
- 利用MySQL主從配置實(shí)現(xiàn)讀寫分離減輕數(shù)據(jù)庫(kù)壓力
- mysql+spring+mybatis實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫分離的代碼配置
- 如何徹底刪除mysql服務(wù)(清理注冊(cè)表)詳解
- MySQL壓縮版zip安裝問(wèn)題的解決方法
- Golang中如何對(duì)MySQL進(jìn)行操作詳解
- 將圖片儲(chǔ)存在MySQL數(shù)據(jù)庫(kù)中的幾種方法
- MySQL存儲(chǔ)文本和圖片的方法
- mysql實(shí)現(xiàn)sequence功能的代碼
相關(guān)文章
thinkPHP使用pclzip打包備份mysql數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了thinkPHP使用pclzip打包備份mysql數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了thinkPHP使用pclzip操作壓縮文件的相關(guān)技巧,需要的朋友可以參考下2016-04-04Laravel 在views中加載公共頁(yè)面的實(shí)現(xiàn)代碼
今天小編就為大家分享一篇Laravel 在views中加載公共頁(yè)面的實(shí)現(xiàn)代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10Laravel核心解讀之異常處理的實(shí)踐過(guò)程
這篇文章主要給大家介紹了關(guān)于Laravel核心解讀之異常處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02PHP實(shí)現(xiàn)的7組經(jīng)緯度與距離的計(jì)算函數(shù)demo
這篇文章主要為大家介紹了PHP實(shí)現(xiàn)的7組經(jīng)緯度與距離的計(jì)算函數(shù)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05