一個簡易的ORM類
自己寫的一個簡易的ORM類,給有興趣的朋友一點思路。
自己寫的一個簡易的ORM類,給有興趣的朋友一點思路。借鑒了一點TP的思路。 <?php <br />
/**<br>
* author: NickBai<br>
* createTime: 2016/11/28 0028 下午 4:00<br>
*/<br>
class MyOrm implements ArrayAccess<br>
{<br>
public $host = '127.0.0.1'; //資料庫位址<br>
public $dbname = 'test'; //資料庫名稱<br>
public $user = 'root'; //資料庫使用者名稱<br>
public $pwd = 'root'; //資料庫密碼<br>
public $port = '3306'; //資料庫連接埠<br>
public $charset = 'utf8'; //資料庫編碼<br>
private $conn = null; //資料庫連結資源<br>
private $alias = []; //記錄全域的語句參數<br>
private $sql; //儲存最後一條sql<br>
<br>
public function __construct()<br>
{<br>
if( is_null( $this->conn ) ){<br>
<br>
$dsn = "mysql:host=$this->host;dbname=$this->dbname;charset=$this->charset;port=$this->port";<br>
$this->conn = new PDO( $dsn, $this->user, $this->pwd );<br>
}<br>
}<br>
<br>
//field語句<br>
public function field( $field )<br>
{<br>
if( !is_string( $field ) ){<br>
throw new exception("field語句的參數必須為字串");<br>
}<br>
<br>
$this->alias['field'] = $field;<br>
return $this;<br>
}<br>
<br>
//table語句<br>
public function table( $table )<br>
{<br>
if( !is_string( $table ) ){<br>
throw new exception("table語句的參數必須為字串");<br>
}<br>
<br>
$this->alias['table'] = $table;<br>
return $this;<br>
}<br>
<br>
//where語句<br>
public function where( $where )<br>
{<br>
$this->alias['where'] = '';<br>
if( is_array( $where ) ){<br>
<br>
foreach( $where as $key=>$vo ){<br>
$this->alias['where'] .= " `$key`" . ' = ' $vo
}<br>
$this->alias['where'] = rtrim( $this->alias['where'], 'and ' );<br>
<br>
}else if( is_string( $where ) ){<br>
<br>
$this->alias['where'] = $where;<br>
}else{<br>
<br> throw new exception("where語句的參數必須為陣列或字串");<br>
}<br>
<br>
return $this;<br>
}<br>
<br>
//limit語句<br>
public function limit( $limit )<br>
{<br>
$this->alias['limit'] = '';<br>
if( is_numeric( $limit ) ){<br>
$this->alias['limit'] = '0,' . $limit;<br>
}else if( is_string( $limit ) ){<br>
$this->alias['limit'] = $limit;<br>
}else{<br>
throw new exception("limit語句的參數必須為數位或字串");<br>
}<br>
<br>
return $this;<br>
}<br>
<br>
//order語句<br>
public function order( $order )<br>
{<br>
if( !is_string( $order ) ){<br>
throw new exception("order語句的參數必須為字串");<br>
}<br>
<br>
$this->alias['order'] = $order;<br>
return $this;<br>
}<br>
<br>
//group語句<br>
public function group( $group )<br>
{<br>
if( !is_string( $group ) ){<br>
throw new exception("group語句的參數必須為字串");<br>
}<br>
<br>
$this->alias['group'] = $group;<br>
return $this;<br>
}<br>
<br>
//解析查詢sql語句<br>
public function ParseSelectSql()<br>
{<br>
$this->sql = 'select *';<br>
if( !empty( $this->alias['field'] ) ){<br>
$this->sql = str_replace( '*', $this->alias['field'], $this->sql );<br>
}<br>
<br>
if( empty( $this->alias['table'] ) ){<br>
throw new exception("請使用table子句設定查詢表");<br>
}else{<br>
<br>
$this->sql .= ' from ' . $this->alias['table'];<br>
}<br>
<br>
if( !empty( $this->alias['where'] ) ){<br>
$this->sql .= ' where ' . $this->alias['where'];<br>
}<br>
<br>
if( !empty( $this->alias['group'] ) ){<br>
$this->sql .= ' group by ' . $this->alias['group'];<br> }<br>
<br>
if(!empty($this->alias['order']) ){<br>
$this->sql.='order by'. $this->alias['order'];<br>
}<br>
<br>
if(!empty($this->alias['limit']) ){<br>
$this->sql.='限制'。 $this->alias['limit'];<br>
}<br>
<br>
}<br>
<br>
//解析加入sql語句<br>
公用函數 ParseAddSql()<br>
{<br>
$this->sql='插入到';<br>
if( 空($this->alias['table']) ){<br>
throw new Exception("請使用table子句設定新增表格");<br>
}其他{<br>
<br>
$this->sql .=$this->alias['table'] . ' 設定';<br>
}<br>
<br>
回$this->sql;<br>
}<br>
<br>
//解析更新sql語句<br>
公用函數 ParseUpdateSql()<br>
{<br>
$this->sql='更新';<br>
if( 空($this->alias['table']) ){<br>
throw new Exception("請使用table子句設定修改表");<br>
}其他{<br>
<br>
$this->sql .=$this->alias['table'] . ' 設定';<br>
}<br>
<br>
if( 空( $this->alias['where'] ) ){<br>
throw new exception("更新語句必須有where子句指定條件");<br>
}<br>
<br>
回$this->sql;<br>
}<br>
<br>
//解析刪除sql語句<br>
公用函數 ParseDeleteSql()<br>
{<br>
$this->sql = '刪除自';<br>
if( 空($this->alias['table']) ){<br>
throw new Exception("請使用table子句設定刪除表");<br>
}其他{<br>
<br>
$this->sql .= $this->alias['table'];<br>
}<br>
<br>
if( 空( $this->alias['where'] ) ){<br>
throw new exception("刪除語句必須有where子句指定條件");<br>
}<br>
<br>
$this->sql.='其中'. $this->alias['where'];<br>
<br>
回$this->sql;<br>
}<br>
<br>
<br>
//查詢語句<br>
公用函數 select()<br>
{<br>
$this->ParseSelectSql();<br> $row = $this->conn->query( $this->sql )->fetchAll( PDO::FETCH_ASSOC );<br>
$result = [];<br>
<br>
foreach( $row as $key=>$vo ){<br>
<br>
$arrObj = clone $this; //clone目前對象防止this物件造成污染<br>
$arrObj->data = $vo;<br>
$result[$key] = $arrObj;<br>
unset( $arrObj );<br>
}<br>
<br>
return $result;<br>
}<br>
<br>
//查詢一條<br>
public function find()<br>
{<br>
$this->ParseSelectSql();<br>
$row = $this->conn->query( $this->sql )->fetch( PDO::FETCH_ASSOC );<br>
<br>
$arrObj = clone $this; //clone目前物件防止對this物件造成污染<br>
$arrObj->data = $row;<br>
$result = $arrObj;<br>
unset( $arrObj );<br>
<br>
return $result;<br>
}<br>
<br>
//新增資料<br>
public function add( $data )<br>
{<br>
if( !is_array( $data ) ){<br>
throw new exception("新增資料add方法參數必須為陣列");<br>
}<br>
<br>
$this->ParseAddSql();<br>
foreach( $data as $key=>$vo ){<br>
$this->sql .= " `{$key}` = '" . $vo . "',";<br>
}<br>
<br>
$this->conn->exec( rtrim( $this->sql, ',' ) );<br>
return $this->conn->lastInsertId();<br>
}<br>
<br>
//更新語句<br>
public function update( $data )<br>
{<br>
if( !is_array( $data ) ){<br>
throw new exception("更新資料update方法參數必須為陣列");<br>
}<br>
<br>
$this->ParseUpdateSql();<br>
foreach( $data as $key=>$vo ){<br>
$this->sql .= " `{$key}` = '" . $vo . "',";<br>
}<br>
<br>
$this->sql = rtrim( $this->sql, ',' ) . ' where ' . $this->alias['where'];<br>
return $this->conn->exec( $this->sql );<br>
<br>
}<br>
<br>
//刪除語句<br>
public function delete()<br>
{<br>
$this->ParseDeleteSql();<br>
return $this->conn->exec( $this->sql );<br> }<br>
<br>
//取得查詢資料<br>
公用函數 getData()<br>
{<br>
返回 $this->data;<br>
}<br>
<br>
//取得最後執行的sql語句<br>
公用函數 getLastSql()<br>
{<br>
回$this->sql;<br>
}<br>
<br>
公用函數__get($name)<br>
{<br>
返回 $this->getData()[$name];<br>
}<br>
<br>
公用函數 offsetExists($offset)<br>
{<br>
if(!isset($this->getData()[$offset]) ){<br>
則返回 NULL;<br>
}<br>
}<br>
<br>
公用函數 offsetGet($offset)<br>
{<br>
返回 $this->getData()[$offset];<br>
}<br>
<br>
公用函數 offsetSet($offset, $value)<br>
{<br>
返回 $this->data[$offset] = $value;<br>
}<br>
<br>
公用函數 offsetUnset($offset)<br>
{<br>
取消設定($this->data[$offset]);<br>
}<br>
}
你可以這樣用:$orm = new MyOrm();<br>
<br>
//查詢語句<br>
$res = $orm->table('user')->order('id desc')->select();<br>
$res = $orm->table('user')->where("name='test'")->order('id desc')->select();<br>
$res = $orm->table('user')->where(['id' => 1])->order('id desc')->find();<br>
$res = $orm->table('user')->where("age > 20")->group('group by name')->order('id desc')->order('id desc' )->group('group by name')->order('id desc')-> limit(2)->select();<br>
$res = $orm->table('user')->where("age > 20")->group('group by name')->order('id desc')->order('id desc' )->group('group by name')->order('id desc')-> limit('2,2')->select();<br>
<br>
//你可以這樣處理資料<br>
foreach($res as $key=>$vo){<br>
回顯$vo->名稱。 '<br>';<br>
}<br>
//也可以這樣處理<br>
foreach($res as $key=>$vo){<br>
回顯$vo['name']。 '<br>';<br>
}<br>
//還可以這樣<br>
foreach($res as $key=>$vo){<br>
print_r($vo->getData()). '<br>';<br>
}<br>
<br>
//新增資料<br>
$數據 = [<br>
'姓名' => '測試1',<br>
'年齡' => 20、<br>
'密碼' => '21232f297a57a5a743894a0e4a801fc3',<br>
'鹽' => ‘網域名稱’<br>
];<br>
$res = $orm->table('user')->add($data );<br>
<br>
//更新資料<br>
$res = $orm->table('user')->where(['id'=>4])->update(['name'=>'sdfdsfdsd','salt'=> ; '111'] );<br>
<br>
//刪除資料<br>
$res = $orm->table('user')->where(['id' => 7, 'id' => 6])->delete();<br>
<br>
//取得執行的sql語句<br>
echo $orm->getLastSql();<br>
<br>
var_dump($res);

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

主機板上SPDIFOUT連接線序最近我遇到了一個問題,就是關於電線的接線順序。我上網查了一下,有些資料說1、2、4對應的是out、+5V、接地;而有些資料則說1、2、4對應的是out、接地、+5V。最好的方法是查看你的主機板說明書,如果找不到說明書,你可以使用萬用電表進行測量。首先找到接地,然後就可以確定其他的接線順序了。主機板vdg怎麼接線連接主機板的VDG接線時,您需要將VGA連接線的一端插入顯示器的VGA接口,另一端插入電腦的顯示卡VGA接口。請注意,不要將其插入主機板的VGA介面。完成連接後,您可以

本篇文章將詳細介紹如何安裝和註冊比特幣交易應用。比特幣交易應用允許用戶管理和交易比特幣等加密貨幣。文章逐步指導用戶完成安裝和註冊過程,包括下載應用程序、創建賬戶、進行身份驗證和首次存款。文章的目標是為初學者提供清晰易懂的指南,幫助他們輕鬆進入比特幣交易的世界。

歐易,又稱OKX,是一個全球領先的加密貨幣交易平台。文章提供了歐易官方安裝包的下載入口,方便用戶在不同設備上安裝歐易客戶端。該安裝包支持 Windows、Mac、Android 和 iOS 系統,用戶可根據自己的設備類型選擇相應版本下載。安裝完成後,用戶即可註冊或登錄歐易賬戶,開始交易加密貨幣和享受平台提供的其他服務。

本文推薦全球十大數字貨幣交易APP,涵蓋幣安(Binance)、OKX、火幣(Huobi Global)、Coinbase、Kraken、Gate.io、KuCoin、Bitfinex、Gemini和Bitstamp。這些平台在交易對數量、交易速度、安全性、合規性、用戶體驗等方面各有特色,例如幣安以其高交易速度和廣泛服務聞名,而Coinbase則更適合新手用戶。選擇適合自己的平台需要綜合考慮自身需求和風險承受能力。 了解全球主流數字貨幣交易平台,助您安全高效進行數字資產交易。

虛擬貨幣市場蓬勃發展,眾多交易平台應運而生。本文將介紹虛擬貨幣領域的三大龍頭應用程序,它們以出色的用戶體驗、強大的安全性和豐富的功能而著稱。這些應用程序包括幣安(Binance)、芝麻開門(gate.io)和 歐易(okx),它們為投資者提供了便捷、安全的途徑,可以購買、出售、交易和跟踪虛擬貨幣。

沒有單一“最好用”的數字貨幣交易App,選擇取決於個人需求。 1. OKX功能強大,幣種豐富;2. Binance流動性高,交易類型多樣;3. Gate.io提供質押挖礦等獨特功能;4. Huobi Global界面友好,多語言支持;5. Kraken注重安全性;6. Coinbase適合新手,注重用戶教育。 選擇時需考慮安全性、流動性、手續費、功能、用戶體驗等等因素。

本文介紹了 10 個主流的加密貨幣交易所,涵蓋了它們的成立時間、服務範圍、安全性、流動性、交易費用等基本信息。這些交易所包括:OKX、Binance、Gate.io、Bitget、Coinbase、Huobi、KuCoin、Crypto.com、Gemini 和 Kraken。

本文根据全球信息,整理了全球领先的虚拟数字货币交易平台排名,包括Binance(币安)、OKX、Gate.io、Huobi(火币)、Coinbase、Kraken、Crypto.com、bitget、KuCoin和Bitstamp等。这些平台在用户数量、交易量、交易品种、安全性、合规性等方面各有特色,例如币安以其庞大的用户群和广泛的交易选择著称,Coinbase则以其在美国市场的领先地位和易用性而闻名。 选择合适的交易平台需要根据自身需求,权衡安全性、费用、交易品种等因素。
