Maison 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);

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Interface de sortie audio numérique sur la carte mère-SPDIF OUT Interface de sortie audio numérique sur la carte mère-SPDIF OUT Jan 14, 2024 pm 04:42 PM

Séquence des lignes de connexion SPDIFOUT sur la carte mère. Récemment, j'ai rencontré un problème concernant la séquence de câblage des fils. J'ai vérifié en ligne. Certaines informations indiquent que 1, 2 et 4 correspondent à la sortie, au +5 V et à la masse tandis que d'autres informations indiquent que 1, 2 et 4 correspondent à la sortie, à la masse et au +5 V ; La meilleure façon est de consulter le manuel de votre carte mère. Si vous ne trouvez pas le manuel, vous pouvez utiliser un multimètre pour le mesurer. Trouvez d’abord la terre, puis vous pourrez déterminer l’ordre du reste du câblage. Comment connecter le câblage VDG de la carte mère Lors de la connexion du câblage VDG de la carte mère, vous devez brancher une extrémité du câble VGA dans l'interface VGA du moniteur et l'autre extrémité dans l'interface VGA de la carte graphique de l'ordinateur. Attention à ne pas le brancher sur le port VGA de la carte mère. Une fois connecté, vous pouvez

Comment installer et enregistrer l'application BTC Trading? Comment installer et enregistrer l'application BTC Trading? Feb 21, 2025 pm 07:09 PM

Cet article fournira une introduction détaillée sur la façon d'installer et d'enregistrer une application de trading Bitcoin. L'application Bitcoin Trading permet aux utilisateurs de gérer et d'échanger des crypto-monnaies telles que Bitcoin. L'article guide les utilisateurs dans le processus d'installation et d'enregistrement étape par étape, y compris le téléchargement des applications, la création de comptes, la réalisation d'identité et le premier dépôt. L'objectif de l'article est de fournir aux débutants des directives claires et faciles à comprendre pour les aider à entrer facilement dans le monde du trading Bitcoin.

OUYI Exchange Télécharger le portail officiel OUYI Exchange Télécharger le portail officiel Feb 21, 2025 pm 07:51 PM

Ouyi, également connu sous le nom d'OKX, est une plate-forme de trading de crypto-monnaie de pointe. L'article fournit un portail de téléchargement pour le package d'installation officiel d'Ouyi, qui facilite les utilisateurs pour installer le client Ouyi sur différents appareils. Ce package d'installation prend en charge les systèmes Windows, Mac, Android et iOS. Une fois l'installation terminée, les utilisateurs peuvent s'inscrire ou se connecter au compte OUYI, commencer à négocier des crypto-monnaies et profiter d'autres services fournis par la plate-forme.

Top 10 des applications mondiales de trading de devises numériques recommandées (2025 Classement des logiciels de trading de devises) Top 10 des applications mondiales de trading de devises numériques recommandées (2025 Classement des logiciels de trading de devises) Mar 12, 2025 pm 05:48 PM

Cet article recommande les dix principales applications de trading de devises numériques au monde, notamment Binance, OKX, Huobi Global, Coinbase, Kraken, Gate.io, Kucoin, Bitfinex, Gemini et Bitstamp. Ces plateformes ont leurs propres caractéristiques en termes de quantité de paire de transactions, de vitesse de transaction, de sécurité, de conformité, d'expérience utilisateur, etc. Par exemple, Binance est connue pour sa vitesse de transaction élevée et ses services étendus, tandis que Coinbase est plus adapté aux novices. Le choix d'une plate-forme qui vous convient nécessite une considération complète de vos propres besoins et de votre tolérance au risque. Découvrez les plateformes mondiales de trading de devises numériques au monde pour vous aider à effectuer le trading d'actifs numériques en toute sécurité et efficacement.

Quel logiciel de trading d'applications de monnaie numérique est le meilleur? Quel logiciel de trading d'applications de monnaie numérique est le meilleur? Mar 07, 2025 pm 06:45 PM

Il n'y a pas d'application de trading de devises numériques unique, et le choix dépend des besoins personnels. 1. OKX a des fonctions puissantes et des types de devises riches. Lors du choix, vous devez considérer la sécurité, la liquidité, les frais de manutention, les fonctions, l'expérience utilisateur et d'autres facteurs.

Quelles sont les trois principales applications de devises virtuelles? Quelles sont les trois principales applications de devises virtuelles? Mar 04, 2025 pm 08:51 PM

Le marché des devises virtuels est en plein essor et de nombreuses plateformes de trading naissent. Cet article présentera les trois principales applications dans le champ de devises virtuels, connue pour leur excellente expérience utilisateur, leur puissante sécurité et ses riches fonctionnalités. Ces applications comprennent Binance, Gate.io et OUYI, qui offrent aux investisseurs des moyens pratiques et sécurisés d'acheter, vendre, échanger et suivre les monnaies virtuelles.

Top 10 des classements de trading de devises numériques virtuels 2025 classements, les dix premiers échanges d'applications de devises virtuelles Top 10 des classements de trading de devises numériques virtuels 2025 classements, les dix premiers échanges d'applications de devises virtuelles Feb 21, 2025 pm 09:03 PM

Cet article présente 10 échanges de crypto-monnaie traditionnels, couvrant des informations de base telles que leur temps d'établissement, leur portée de service, la sécurité, la liquidité, les frais de transaction, etc. Ces échanges comprennent: OKX, Binance, Gate.io, Bitget, Coinbase, Huobi, Kucoin, Crypto.com, Gemini et Kraken.

Plateforme de trading de devises numériques 2025 Plateforme de trading de devises numériques 2025 Mar 04, 2025 pm 07:06 PM

Sur la base des informations mondiales, cet article compile le classement des principales plateformes de trading virtuels virtuelles virtuelles au monde, notamment Binance, OKX, Gate.io, Huobi, Coinbase, Kraken, Crypto.com, Bitget, Kucoin et Bitstamp. Ces plateformes ont leurs propres caractéristiques en termes de nombre d'utilisateurs, de volume de transactions, de types de transactions, de sécurité, de conformité, etc. Par exemple, Binance est connue pour sa grande base d'utilisateurs et ses vastes options de négociation, tandis que Coinbase est connu pour son leadership et sa facilité d'utilisation sur le marché américain. Le choix d'une plate-forme de trading appropriée nécessite des facteurs de pesée tels que la sécurité, les frais et les produits de trading en fonction de vos propres besoins.

See all articles