Rumah php教程 php手册 一个简易的ORM类

一个简易的ORM类

Dec 01, 2016 am 12:00 AM

自己写的一个简易的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 . ' and ';<br>             }<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 .= ' limit ' . $this->alias['limit'];<br>         }<br> <br>     }<br> <br>     //解析添加sql语句<br>     public function ParseAddSql()<br>     {<br>         $this->sql = 'insert into ';<br>         if( empty( $this->alias['table'] ) ){<br>             throw new exception("请用table子句设置添加表");<br>         }else{<br> <br>             $this->sql .= $this->alias['table'] . ' set ';<br>         }<br> <br>         return $this->sql;<br>     }<br> <br>     //解析更新sql语句<br>     public function ParseUpdateSql()<br>     {<br>         $this->sql = 'update ';<br>         if( empty( $this->alias['table'] ) ){<br>             throw new exception("请用table子句设置修改表");<br>         }else{<br> <br>             $this->sql .= $this->alias['table'] . ' set ';<br>         }<br> <br>         if( empty( $this->alias['where'] ) ){<br>             throw new exception("更新语句必须有where子句指定条件");<br>         }<br> <br>         return $this->sql;<br>     }<br> <br>     //解析删除sql语句<br>     public function ParseDeleteSql()<br>     {<br>         $this->sql = 'delete from ';<br>         if( empty( $this->alias['table'] ) ){<br>             throw new exception("请用table子句设置删除表");<br>         }else{<br> <br>             $this->sql .= $this->alias['table'];<br>         }<br> <br>         if( empty( $this->alias['where'] ) ){<br>             throw new exception("删除语句必须有where子句指定条件");<br>         }<br> <br>         $this->sql .= ' where ' . $this->alias['where'];<br> <br>         return $this->sql;<br>     }<br> <br> <br>     //查询语句<br>     public function 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>     public function getData()<br>     {<br>         return $this->data;<br>     }<br> <br>     //获取最后一次执行的sql语句<br>     public function getLastSql()<br>     {<br>         return $this->sql;<br>     }<br> <br>     public function __get($name)<br>     {<br>         return $this->getData()[$name];<br>     }<br> <br>     public function offsetExists($offset)<br>     {<br>         if( !isset( $this->getData()[$offset] ) ){<br>             return NULL;<br>         }<br>     }<br> <br>     public function offsetGet($offset)<br>     {<br>         return $this->getData()[$offset];<br>     }<br> <br>     public function offsetSet($offset, $value)<br>     {<br>         return $this->data[$offset] = $value;<br>     }<br> <br>     public function offsetUnset($offset)<br>     {<br>         unset( $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')->limit(2)->select();<br> $res = $orm->table('user')->where("age > 20")->group('group by name')->order('id desc')->limit('2,2')->select();<br> <br> //你可以这样处理数据<br> foreach( $res as $key=>$vo ){<br>     echo $vo->name . '<br>';<br> }<br> //也可以这样处理<br> foreach( $res as $key=>$vo ){<br>     echo $vo['name'] . '<br>';<br> }<br> //还可以这样<br> foreach( $res as $key=>$vo ){<br>     print_r( $vo->getData() ) . '<br>';<br> }<br> <br> //添加数据<br> $data = [<br>     'name' => 'test1',<br>     'age' => 20,<br>     'password' => '21232f297a57a5a743894a0e4a801fc3',<br>     'salt' => 'domain'<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);

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Antara muka output audio digital pada papan induk-SPDIF OUT Antara muka output audio digital pada papan induk-SPDIF OUT Jan 14, 2024 pm 04:42 PM

Urutan talian sambungan SPDIFOUT pada papan induk Baru-baru ini, saya menghadapi masalah mengenai urutan pendawaian wayar. Saya menyemak dalam talian Beberapa maklumat mengatakan bahawa 1, 2, dan 4 sepadan dengan keluar, +5V, dan tanah manakala maklumat lain mengatakan bahawa 1, 2, dan 4 sepadan dengan keluar, tanah dan +5V. Cara terbaik ialah menyemak manual papan induk anda Jika anda tidak menemui manual, anda boleh menggunakan multimeter untuk mengukurnya. Cari tanah dahulu, kemudian anda boleh menentukan susunan pendawaian yang lain. Cara menyambung pendawaian VDG papan induk Apabila menyambungkan pendawaian VDG papan induk, anda perlu palamkan satu hujung kabel VGA ke antara muka VGA monitor dan hujung satu lagi ke antara muka VGA kad grafik komputer. Sila berhati-hati untuk tidak memasukkannya ke dalam port VGA motherboard. Setelah disambungkan, anda boleh

Bagaimana cara memasang dan mendaftarkan aplikasi perdagangan BTC? Bagaimana cara memasang dan mendaftarkan aplikasi perdagangan BTC? Feb 21, 2025 pm 07:09 PM

Artikel ini akan memberikan pengenalan terperinci tentang cara memasang dan mendaftarkan aplikasi perdagangan bitcoin. Aplikasi perdagangan Bitcoin membolehkan pengguna mengurus dan berdagang kriptografi seperti Bitcoin. Artikel ini membimbing pengguna melalui proses pemasangan dan pendaftaran langkah demi langkah, termasuk memuat turun aplikasi, membuat akaun, melakukan pengesahan identiti, dan deposit pertama. Matlamat artikel ini adalah untuk menyediakan pemula dengan garis panduan yang jelas dan mudah difahami untuk membantu mereka dengan mudah memasuki dunia perdagangan bitcoin.

Portal rasmi muat turun Ouyi Exchange Portal rasmi muat turun Ouyi Exchange Feb 21, 2025 pm 07:51 PM

Ouyi, juga dikenali sebagai Okx, adalah platform perdagangan cryptocurrency terkemuka di dunia. Artikel ini menyediakan portal muat turun untuk pakej pemasangan rasmi Ouyi, yang memudahkan pengguna memasang klien OUYI pada peranti yang berbeza. Pakej pemasangan ini menyokong sistem Windows, Mac, Android dan iOS. Selepas pemasangan selesai, pengguna boleh mendaftar atau log masuk ke akaun OUYI, mula membuat kriptografi perdagangan dan nikmati perkhidmatan lain yang disediakan oleh platform.

Top 10 aplikasi perdagangan mata wang digital global disyorkan (2025 Perisian Perisian Perdagangan Mata Wang) Top 10 aplikasi perdagangan mata wang digital global disyorkan (2025 Perisian Perisian Perdagangan Mata Wang) Mar 12, 2025 pm 05:48 PM

Artikel ini mencadangkan sepuluh aplikasi perdagangan mata wang digital teratas di dunia, termasuk Binance, OKX, Huobi Global, Coinbase, Kraken, Gate.io, Kucoin, Bitfinex, Gemini dan Bitstamp. Platform ini mempunyai ciri -ciri mereka sendiri dari segi kuantiti pasangan transaksi, kelajuan transaksi, keselamatan, pematuhan, pengalaman pengguna, dan lain -lain sebagai contoh, Binance dikenali dengan kelajuan transaksi yang tinggi dan perkhidmatan yang luas, sementara Coinbase lebih sesuai untuk orang baru. Memilih platform yang sesuai dengan anda memerlukan pertimbangan yang komprehensif terhadap keperluan anda sendiri dan toleransi risiko. Ketahui mengenai platform perdagangan mata wang digital arus perdana di dunia untuk membantu anda menjalankan perdagangan aset digital dengan selamat dan cekap.

Perisian perdagangan aplikasi mata wang digital mana yang terbaik? Perisian perdagangan aplikasi mata wang digital mana yang terbaik? Mar 07, 2025 pm 06:45 PM

Tidak ada aplikasi perdagangan mata wang digital "terbaik", dan pilihan bergantung kepada keperluan peribadi. 1. Apabila memilih, anda perlu mempertimbangkan keselamatan, kecairan, yuran pengendalian, fungsi, pengalaman pengguna dan faktor lain.

Yang mana tiga aplikasi mata wang maya terkemuka? Yang mana tiga aplikasi mata wang maya terkemuka? Mar 04, 2025 pm 08:51 PM

Pasaran mata wang maya berkembang pesat, dan banyak platform perdagangan dilahirkan. Artikel ini akan memperkenalkan tiga aplikasi utama dalam bidang Mata Wang Maya, yang terkenal dengan pengalaman pengguna mereka yang sangat baik, keselamatan yang kuat dan ciri -ciri yang kaya. Aplikasi ini termasuk Binance, Gate.io dan Ouyi, yang menyediakan pelabur dengan cara yang mudah dan selamat untuk membeli, menjual, berdagang dan menjejaki mata wang maya.

Top 10 Platform Perdagangan Mata Wang Digital Maya 2025, Pertukaran Aplikasi Mata Wang Sepuluh Maya Top 10 Platform Perdagangan Mata Wang Digital Maya 2025, Pertukaran Aplikasi Mata Wang Sepuluh Maya Feb 21, 2025 pm 09:03 PM

Artikel ini memperkenalkan 10 pertukaran cryptocurrency arus perdana, yang meliputi maklumat asas seperti masa penubuhan mereka, skop perkhidmatan, keselamatan, kecairan, yuran transaksi, dll. Pertukaran ini termasuk: OKX, Binance, Gate.io, Bitget, Coinbase, Huobi, Kucoin, Crypto.com, Gemini dan Kraken.

Platform Perdagangan Mata Wang Digital 2025 Platform Perdagangan Mata Wang Digital 2025 Mar 04, 2025 pm 07:06 PM

Berdasarkan maklumat global, artikel ini menyusun kedudukan platform perdagangan mata wang digital maya terkemuka di dunia, termasuk Binance, OKX, Gate.io, Huobi, Coinbase, Kraken, Crypto.com, Bitget, Kucoin dan Bitstamp. Platform ini mempunyai ciri -ciri mereka sendiri dari segi kiraan pengguna, jumlah urus niaga, jenis urus niaga, keselamatan, pematuhan, dan lain -lain. Sebagai contoh, Binance dikenali sebagai asas pengguna yang besar dan pilihan perdagangan yang luas, sementara Coinbase terkenal dengan kepimpinannya dan kemudahan penggunaannya di pasaran AS. Memilih platform perdagangan yang sesuai memerlukan faktor -faktor yang berat seperti keselamatan, yuran, dan produk perdagangan berdasarkan keperluan anda sendiri.

See all articles