ホームページ >バックエンド開発 >PHPチュートリアル >thinkphp_PHPチュートリアルでOracle接続時にカプセル化方式が使用できない問題の解決方法

thinkphp_PHPチュートリアルでOracle接続時にカプセル化方式が使用できない問題の解決方法

WBOY
WBOYオリジナル
2016-07-21 15:05:45799ブラウズ

最近、THinkPHP による Oracle データベースへの接続に関する問題をいくつか集めました。多くの友人が mysql に接続する方法に従っているため、Oreale で通常使用できない方法がいくつか発生しています。例:findAll、Selectメソッドが使用できず、必要なデータが取得できません。 Create メソッドと add メソッドでは、データを作成してデータベースに書き込むことはできません。

実際、私は以前の問題に基づいて数日間デバッグし、問題を見つけ、私自身の小さなプロジェクトの実践でそれを正常に使用できたので、今から私の経験を皆さんと共有します。

1. データベース接続と設定ファイルの詳細については説明しません。データテーブルの例に基づいて操作のみを説明します。
2. テーブルの構造は次のとおりです:

3. Oracle データベースはテーブル名とフィールドを大文字に変換し、ID 主キーをサポートしないため、このテーブルには 3 つのフィールドがあります。ID 主キー、ユーザー名、パスワードです。この機能を実現するには、ID 自動シーケンス + ID 自己インクリメントを実現するトリガーなどの他の方法を使用するしかありません。

4. ThinkPHP では、Action はコントローラー、Model はモデル、ビューはテンプレートによって表されます。
まずコントローラーについてですが、リストの追加と取得の方法のみ紹介します。
次に、モデルについて話しますが、これが成功の主な理由です。 なぜですか? ThinkPHP にはフィールド マッピングがあり、MYSQL のサポートに最適です。基本的に MODEL を記述する必要はありませんが、M->add() を使用してデータを追加する場合、フィールドは $this になります。 -> _facade() メソッドは除外します。この方法で生成された SQL ステートメントは実行できないため、間違っているはずです。その結果、データをデータベースに追加できず、select() メソッドもフィルターされます。

繰り返しになりますが、ブレークポイントがフィルタリングされるとき、このフィルタリング メソッドはフィールド マッピングの配列を持ちます。このフィルタリング メソッドは、このフィールド配列と比較します。その結果、デバッグしたところ、新しい MODEL はフィールド マッピングをまったく追加しておらず、追加されたデータ フィールドに 1 つずつ対応することはできませんでした。これが間違いの核心です。

基本的な MVC 構造によれば、PHP、JAVA、.NET はすべてそのような構造になっており、厳密な標準に従って、MODEL 層のコードは次のようになります。つまり、データベースフィールドを含むマップです。しかし、mysql を使用する多くの人は、単に MODEL でコードを記述しません。この習慣を Oracle で使用すると問題が発生します。

5. 上記のデータ テーブルに対してコードを以下に記述します。
私のアクションは次のようになります: UserAction.class.php。コントローラーについては、追加と検索の例のみを作成したので、コードは次のとおりです:

コードをコピーします コードは次のとおりです:
public functionindex() ; }

//ユーザー送信処理を追加
public function Create_Post() {
'パスワード'] = md5($this->_post('pwd')); if (false ! == $Query_Result) {
} } else { "Header (" Content-Type: Text/HTML; Charset = UTF-8 ");
exit ($ m_user- & gt; geterror (). '[& Lt; a href =" javascript :back () & gt ;; Return ]');

}



アクションの説明:




コードをコピー

コードは次のとおりです:


$M_User=new UserModel();


この方法が一番良いです 私は .NET で作業しているので、いつもこのように書いてきたので、この方法で書くのが良いです。特定のモデルをインスタンス化するには、User テーブルを操作することが厳密に必要です。
POSTデータを取得するコードについてはあまり説明しません。



コードをコピーします

コードは次のとおりです:

$M_User->create();

これは非常に優れた ThinkPHP のメソッドであり、違法なものを除外するのに役立ちます。使用することをお勧めします。
コードをコピーします コードは次のとおりです:

$Query_Result = $M_User->add($data);

このセクションは、データを追加するデータを指定することに慣れています。このセクションも追加されるため、$M_User およびフィルター フィールドに基づいてインスタンス化する必要があります。もちろん、MODEL を適切にコーディングすれば問題ありません。以下のコードについては説明を省略します。公式文書はあります。

私のモデルは次のようなものです: UserModel.class.php
コードをコピーします
コードは次のとおりです:


?protected $fields = array(
'id', 'username', 'password'
);
モデルの説明: これが重要なポイントです。この方法でのみ、new によって生成された $M_User のマッピング フィールド配列が POST データに対応し、フィルタリング メソッドが可能になります。正常に認識され、フィルタされません。

6. 上記の操作が完了すると、ThinkPHP が提供するページング (limit)、find()、findAll などのメソッドを使用してデータを操作できるようになります。

MySQL への接続には問題ないかもしれませんが、Oracle では、カプセル化されたメソッドを呼び出すことができない場合、モデル層にフィールド定義を追加する必要があります。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327668.html技術記事最近、THinkPHP による Oracle データベースへの接続に関する問題をいくつか集めました。多くの友人が mysql に接続する方法に従っているため、Oreale で通常使用できない方法がいくつか発生しています。たとえば…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。