ホームページ php教程 php手册 単純な ORM クラス

単純な ORM クラス

Dec 01, 2016 am 12:00 AM

興味のある友人にいくつかのアイデアを提供するために、私は自分で簡単な ORM クラスを作成しました。
興味のある友人にいくつかのアイデアを提供するために、私は自分で簡単な ORM クラスを作成しました。 TPさんのアイデアを少し拝借させていただきました。 <?php<br /> /**<br /> * 著者: ニックバイ<br /> *createTime: 2016/11/28 0028 4:00 pm<br /> ​*/<br /> MyOrm クラスは ArrayAccess を実装します<br /> {<br /> パブリック $host = '127.0.0.1' //データベースアドレス<br />; Public $dbname = 'test' //データベース名<br />; Public $user = 'root' //データベースユーザー名<br />; Public $pwd = 'root' //データベースパスワード<br />; パブリック $port = '3306' //データベース ポート<br />; Public $charset = 'utf8' //データベースエンコーディング<br />; private $conn = null; //データベースリンクリソース<br /> Private $alias = [] //グローバルステートメントパラメータを記録します<br />; Private $sql // 最後の SQL を保存します<br /> <br /> パブリック関数 __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 = 新しい PDO( $dsn, $this->user, $this->pwd);<br /> }<br /> }<br /> <br /> //フィールドステートメント<br /> パブリック関数フィールド($field)<br /> {<br /> If (! Is_string ($ フィールド)) {<br /> throw newException("フィールドステートメントのパラメータは文字列である必要があります");<br /> }<br /> <br /> $this->alias['field'] = $field;<br /> $これを返します<br /> }<br /> <br /> //テーブルステートメント<br /> パブリック関数テーブル($table)<br /> {<br /> If (! Is_string ($ テーブル)) {<br /> throw newException("テーブルステートメントのパラメータは文字列である必要があります");<br /> }<br /> <br /> $this->alias['table'] = $table;<br /> $これを返します<br /> }<br /> <br /> //where ステートメント<br /> パブリック関数 where($where)<br /> {<br /> $this->alias['where'] = '';<br /> もし( <br /> foreach( $where as $key=>$vo ){<br /> $this->alias['where'] .= " `$key`" . ';<br> }<br> $this->alias['where'] = rtrim( $this->alias['where'], 'and ' );<br> <br> }else if( is_string( $where )){<br> <br> $this->alias['where'] = $where;<br> }その他{<br> <br>throw newException("where ステートメントのパラメータは配列または文字列である必要があります");<br> }<br> <br> $これを返します<br> }<br> <br> // 制限ステートメント<br> 公開機能制限($limit)<br> {<br> $this->alias['limit'] = '';<br> if( is_numeric( $limit )){<br> $this->alias['limit'] = '0,' . }else if( is_string( $limit )){<br> $this->alias['limit'] = $limit;<br> }その他{<br> throw newException("limit ステートメントのパラメータは数値または文字列である必要があります");<br> }<br> <br> $これを返します<br> }<br> <br> //注文明細書<br> パブリック関数オーダー($order)<br> {<br> もし( throw newException("順序ステートメントのパラメータは文字列である必要があります");<br> }<br> <br> $this->alias['order'] = $order;<br> $これを返します<br> }<br> <br> //グループステートメント<br> パブリック関数グループ($group)<br> {<br> If (! Is_string ($ Group)) {<br> throw newException("グループステートメントのパラメータは文字列である必要があります");<br> }<br> <br> $this->alias['group'] = $group;<br> $これを返します<br> }<br> <br> //クエリSQL文を解析します<br> パブリック関数 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- & gt; alias ['table'])) {<br> throw newException("テーブル句を使用してクエリテーブルを設定してください");<br> }その他{<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>                                                                                                                                            $this->sql .= ' グループ化 ' $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->エイリアス['制限'];<br>         }<br> <br>     }<br> <br>     // 解析追加sql语句<br>     パブリック関数ParseAddSql()<br>     {<br>         $this->sql = '挿入 ';<br>         if( empty( $this->alias['table'] ) ){<br>             throw new Exception("句请用table子设置追加表");<br>         }その他{<br> <br>             $this->sql .= $this->alias['table'] 。 ' セット ';<br>         }<br> <br>         return $this->sql;<br>     }<br> <br>     //解析更新sql语句<br>     パブリック関数ParseUpdateSql()<br>     {<br>         $this->sql = '更新 ';<br>         if( empty( $this->alias['table'] ) ){<br>             throw new Exception("句请用table子设置修改表");<br>         }その他{<br> <br>             $this->sql .= $this->alias['table'] 。 ' セット ';<br>         }<br> <br>         if( empty( $this->alias['where'] ) ){<br>             throw new Exception("更新语句必须有where子句指定条件");<br>         }<br> <br>         return $this->sql;<br>     }<br> <br>     // 解析删除句sql语<br>     パブリック関数ParseDeleteSql()<br>     {<br>         $this->sql = '削除元 ';<br>         if( empty( $this->alias['table'] ) ){<br>             throw new Exception("句请用table子设置删除表");<br>         }その他{<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>     パブリック関数 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 // このオブジェクトの汚染を防ぐために現在のオブジェクトを複製します<br> $arrObj->data = $vo;<br> $result[$key] = $arrObj;<br> unset($arrObj);<br> }<br> <br> $ の結果を返します。 }<br> <br> // 1 つの項目をクエリします<br> パブリック関数 find()<br> {<br> $this->ParseSelectSql();<br> $row = $this->conn->query( $this->sql )->fetch( PDO::FETCH_ASSOC );<br> <br> $arrObj = clone $this // このオブジェクトの汚染を防ぐために現在のオブジェクトのクローンを作成します<br> $arrObj->data = $row;<br> $result = $arrObj;<br> unset($arrObj);<br> <br> $ の結果を返します。 }<br> <br> //データを追加します<br> パブリック関数 add($data)<br> {<br> If (! Is_array ($ data)) {<br> 新しい例外をスローする(「データの追加メソッドのパラメータは配列である必要があります」);<br> }<br> <br> $this->ParseAddSql();<br> foreach( $data as $key=>$vo ){<br> $this->sql .= " `{$key}` = '" . }<br> <br> $this->conn->exec( rtrim( $this->sql, ',' ));<br> return $this->conn->lastInsertId();<br> }<br> <br> //ステートメントを更新します<br> パブリック関数の更新($data)<br> {<br> If (! Is_array ($ data)) {<br> throw newException("更新データ更新メソッドのパラメータは配列である必要があります");<br> }<br> <br> $this->ParseUpdateSql();<br> foreach( $data as $key=>$vo ){<br> $this->sql .= " `{$key}` = '" . }<br> <br> $this->sql = rtrim( $this->sql, ',' ) ' where ' . $this->alias['where'];<br> return $this->conn->exec( $this->sql );<br> <br> }<br> <br> // ステートメントを削除します<br> パブリック関数 delete()<br> {<br> $this->ParseDeleteSql();<br> return $this->conn->exec( $this->sql );<br>    }<br> <br>     //获取查询データ<br>     パブリック関数 getData()<br>     {<br>         $this->データを返す;<br>     }<br> <br>     //最後に実行した SQL 句を取得します<br>     パブリック関数 getLastSql()<br>     {<br>         return $this->sql;<br>     }<br> <br>     パブリック関数__get($name)<br>     {<br>         return $this->getData()[$name];<br>     }<br> <br>     public function offsetExists($offset)<br>     {<br>         if( !isset( $this->getData()[$offset] ) ){<br>             NULL を返します;<br>         }<br>     }<br> <br>     パブリック関数offsetGet($offset)<br>     {<br>         return $this->getData()[$offset];<br>     }<br> <br>     パブリック関数offsetSet($offset, $value)<br>     {<br>         return $this->data[$offset] = $value;<br>     }<br> <br>     パブリック関数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')->制限(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>     「名前」 => 「テスト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' =&gt ; 「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);

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

マザーボード上のデジタルオーディオ出力インターフェイス - SPDIF OUT マザーボード上のデジタルオーディオ出力インターフェイス - SPDIF OUT Jan 14, 2024 pm 04:42 PM

マザーボード上の SPDIFOUT 接続線の順序 最近、ワイヤの配線順序に関する問題に遭遇しました。ネットで調べたところ、1、2、4がアウト、+5V、グラウンドに相当するという情報もあれば、1、2、4がアウト、グラウンド、+5Vに相当するという情報もありました。最善の方法は、マザーボードのマニュアルを確認することです。マニュアルが見つからない場合は、マルチメーターを使用して測定できます。最初にアースを見つけてから、残りの配線の順序を決定します。マザーボードの VDG 配線の接続方法 マザーボードの VDG 配線を接続するときは、VGA ケーブルの一端をモニターの VGA インターフェイスに差し込み、もう一端をコンピューターのグラフィックス カードの VGA インターフェイスに差し込む必要があります。マザーボードの VGA ポートに差し込まないよう注意してください。接続すると、次のことが可能になります

BTCトレーディングアプリをインストールして登録する方法は? BTCトレーディングアプリをインストールして登録する方法は? Feb 21, 2025 pm 07:09 PM

この記事では、ビットコイン取引アプリケーションのインストールと登録方法の詳細な紹介について説明します。ビットコイン取引アプリを使用すると、ユーザーはビットコインなどの暗号通貨を管理および取引できます。この記事では、アプリケーションのダウンロード、アカウントの作成、身元確認の実行、最初のデポジットなど、インストールおよび登録プロセスを段階的にガイドします。この記事の目標は、初心者に明確で理解しやすいガイドラインを提供して、ビットコイン取引の世界に簡単に参入できるようにすることです。

OUYI Exchangeダウンロード公式ポータル OUYI Exchangeダウンロード公式ポータル Feb 21, 2025 pm 07:51 PM

OKXとしても知られるOUYIは、世界をリードする暗号通貨取引プラットフォームです。この記事では、OUYIの公式インストールパッケージのダウンロードポータルを提供します。これにより、ユーザーはさまざまなデバイスにOUYIクライアントをインストールすることが容易になります。このインストールパッケージは、Windows、Mac、Android、およびiOSシステムをサポートします。インストールが完了した後、ユーザーはOUYIアカウントに登録またはログインし、暗号通貨の取引を開始し、プラットフォームが提供するその他のサービスを楽しむことができます。

トップ10グローバルデジタル通貨取引アプリを推奨する(2025通貨取引ソフトウェアのランキング) トップ10グローバルデジタル通貨取引アプリを推奨する(2025通貨取引ソフトウェアのランキング) Mar 12, 2025 pm 05:48 PM

この記事では、Binance、Okx、Huobi Global、Coinbase、Kraken、Gate.io、Kucoin、Bitfinex、Gemini、Bitstampなど、世界のトップ10のデジタル通貨取引アプリを推奨しています。これらのプラットフォームには、トランザクションペアの数量、トランザクション速度、セキュリティ、コンプライアンス、ユーザーエクスペリエンスなどの点で独自の特性があります。たとえば、Binanceは高いトランザクション速度と広範なサービスで知られていますが、Coinbaseは初心者により適しています。自分に合ったプラットフォームを選択するには、自分のニーズとリスク許容度を包括的に検討する必要があります。 世界の主流のデジタル通貨取引プラットフォームについて学び、デジタル資産取引を安全かつ効率的に行うのに役立ちます。

主要な仮想通貨アプリはどれですか? 主要な仮想通貨アプリはどれですか? Mar 04, 2025 pm 08:51 PM

仮想通貨市場は活況を呈しており、多くの取引プラットフォームが生まれています。この記事では、優れたユーザーエクスペリエンス、強力なセキュリティ、豊富な機能で知られる仮想通貨分野で3つの主要なアプリケーションを紹介します。これらのアプリケーションには、Binance、Gate.io、Ouyiが含まれます。これにより、投資家は、仮想通貨を売買、販売、販売、追跡する便利で安全な方法を提供します。

どのデジタル通貨アプリトレーディングソフトウェアが最適ですか? どのデジタル通貨アプリトレーディングソフトウェアが最適ですか? Mar 07, 2025 pm 06:45 PM

単一の「ベスト」デジタル通貨取引アプリはありません。選択は個人的なニーズに依存します。 1。豊富な通貨タイプはあります。 選択するときは、セキュリティ、流動性、手数料、機能、ユーザーエクスペリエンス、その他の要因を考慮する必要があります。

トップ10仮想デジタル通貨取引プラットフォーム2025ランキング、トップ10の仮想通貨アプリ交換 トップ10仮想デジタル通貨取引プラットフォーム2025ランキング、トップ10の仮想通貨アプリ交換 Feb 21, 2025 pm 09:03 PM

この記事では、10の主流の暗号通貨交換を紹介し、確立時間、サービススコープ、セキュリティ、流動性、取引料などの基本情報をカバーします。これらの交換には、Okx、Binance、Gate.io、Bitget、Coinbase、Huobi、Kucoin、Crypto.com、Gemini、Krakenが含まれます。

デジタル通貨取引プラットフォーム2025 デジタル通貨取引プラットフォーム2025 Mar 04, 2025 pm 07:06 PM

グローバル情報に基づいて、この記事は、Binance、Okx、Gate.io、Huobi、Coinbase、Kraken、Crypto.com、Bitget、Kucoin、Bitstampなど、世界をリードする仮想デジタル通貨取引プラットフォームのランキングをまとめます。これらのプラットフォームは、ユーザー数、トランザクションボリューム、トランザクションタイプ、セキュリティ、コンプライアンスなどの点で独自の特性を持っています。たとえば、Binanceは大規模なユーザーベースと広範な取引オプションで知られていますが、Coinbaseは米国市場でのリーダーシップと使いやすさで知られています。 適切な取引プラットフォームを選択するには、セキュリティ、手数料、商品などの計量要因があなた自身のニーズに基づいて必要です。

See all articles