ホームページ >バックエンド開発 >PHPチュートリアル >thinkphp_PHPチュートリアルでOracle接続時にカプセル化方式が使用できない問題の解決方法
最近、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。コントローラーについては、追加と検索の例のみを作成したので、コードは次のとおりです: