ホームページ  >  記事  >  バックエンド開発  >  ThinkPHP が Oracle データベースに接続する、thinkphporacle_PHP チュートリアル

ThinkPHP が Oracle データベースに接続する、thinkphporacle_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:53:50814ブラウズ

ThinkPHP は Oracle データベース、thinkphporacle に接続します

1. 動作環境のセットアップ

システム: Windows7 Ultimate 64ビット

PHP環境:wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24 32ビット版
ダウンロードアドレス: http://www.bkjia.com/softs/161568.html

ThinkPHP: 3.2.3 正式バージョン
ダウンロードアドレス: http://thinkphp.cn/down.html

Oracle:Orcale_11gR2 32ビット版
ダウンロードアドレス: http://www.oracle.com/technetwork/cn/indexes/downloads/index.html

データベース操作ツール:PLSQL Developer 32-bit
ダウンロードアドレス: http://www.bkjia.com/softs/63962.html

開発ツール: NetBeans IDE 7.1.2
ダウンロードアドレス: http://www.bkjia.com/softs/18343.html

注: ソフトウェアの「ビット」は非常に重要なので、通常の状況では、システムは 64 ビットであるため、64 ビットのソフトウェアを使用するのが最善ですが、ここではシステムを除いて、すべてに 32 を選択 このビットには理由があって、PLSQL Developer および WAMP の PHP 拡張機能を操作することが目的です。 PLSQL Developerには64ビット版がないためです。 64 ビットの Oracle データベースを使用して 32 ビットのクライアントをインストールできると言う友人もいますが、私の操作方法が気に入らない場合は、それを避けてください。もちろん、PLSQL Developer を使用せずに Oracle 独自の SQL Developer を使用する場合は、64 ビットまたは 32 ビットのどちらをインストールするかはあなた次第です。 PHP は、Oracle データベースに接続するために対応する拡張機能を開く必要があります。PHP 拡張機能もデータベース クライアントのビット数に対応する必要があるため、この拡張機能にはデータベース クライアントのサポートも必要です。冗長の終わり。

2. 環境設定

1. オペレーティング システムのインストールについては説明しません。Oracle のインストールは自分で解決できます。NetBeans IDE 7.1.2 も自分で解決できます。

2. Wamp のインストールについては説明しません。方法がわからない場合は、DOS から学び直してください。

3. WAMP は、Wamp がインストールされているフォルダーの下の www に PHP Web ページのフォルダーを定義します。つまり、D:WAMPwww です。当面はその他のカスタム変更は行いません。 wamp を起動します。システム トレイ アイコンが緑色の場合は、起動が正常であることを意味します。

4. localhost を開くと、次のインターフェイスが表示されます。これは、環境設定が基本的に OK であることを意味します。なぜ基本的なのかというと、Oracle の構成がまだ設定されていないからです。

5. 図に示すように、PHP 拡張機能メニューを開き、緑色のアイコンを左クリックし、php-oci8 の拡張機能をクリックします。再起動後は緑色になるまで待ちます。

6. 先ほどの localhost ページを再度開きます。図 4 に示すような表示がある場合は、PHP が現在 Oracle をサポートしていることを意味します。

私が使用している wamp クライアントと oracle クライアントは両方とも 32 ビットであることに注意してください。一方が 64 ビットである場合、oci 拡張子を開くことができず、自動環境監視ページに oci8 が表示されません。 PL/SQLを使用しない前提で、32ビットOracleと32ビットWAMPの組み合わせ、または64ビットOracleと64ビットWAMPの組み合わせでなければなりません。それ以外の場合は避けてください。

3.PHP の構成を考える

1. ダウンロードした 3.0 正式バージョンを解凍します。プロジェクト内にはコアとなる ThinkPHP フォルダーのみが必要です。
2. IDE を使用して新しいプロジェクトを作成します。他のフォルダーをカスタマイズする必要がある場合は、ここでは変更しません。
3. Thinkphp フォルダーをプロジェクト フォルダーにコピーし、新しい php ファイルを作成し、index.php という名前を付けます。
4. これらのファイルは既に IDE に表示されているので、index.php を開き、次の内容を書き込みます。 リーリー

5. ブラウザで localhost/プロジェクト名/index.php を開くと、Thinkphp が関連するファイルとフォルダーを生成します。

6. 設定ファイルを操作して、Conf フォルダー内の config.php ファイルを見つけ、次のように変更します。 リーリー
Oracle データベースと mysql は構造が異なります。通常、デフォルトでインストールされるデータベース名は orcl です。複数のデータベース モニターを使用する場合は、特定のモニター フィールドに従って設定する必要があります。例: 私のローカル データベースは Orcl で、外部ネットワーク上の別のデータベースを監視しています。この外部ネットワーク データベースに接続する必要がある場合、記述する必要があるデータベース名は orcl2 です。

7. 以上の設定でOracleデータベースに接続できるようになりますが、次回分解するthinkphpの実際の動作では注意すべき点がいくつかあります。

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

其实根据以前问题我做了几天调试,找到了问题所在,并成功在我自己一个小项目练习中使用正常,那么现在就将我的经验分享给大家。

1,数据库的连接及配置文件的内容我就不说了, 上面已经做了解释。我这里只根据一个数据表的例子来说明我的操作。

2,表结构如下:

3,这个表中有3个字段,ID主键,用户名username和密码password,因为oracle数据库把表名和字段都是转成大写的,同时不支持ID主键自增,我只有使用另外的方法来实现这个功能,比如:ID自动序列+触发器实现ID自增。

4, ThinkPHP中,Action是控制器,Model是模型,视图是以模板方式体现的。

首先,说控制器,我只做增加和获取列表的方法介绍。

其次,说模型,这里才是成功的主要原因。为什么?ThinkPHP是有字段映射的,这个在对MYSQL的支持非常完美,基本不用写MODEL,但是对ORALCE就不行了,当使用M->add()来添加数据时,字段会被$this->_facade()方法过滤掉。这样生成的SQL语句就是没法执行的,肯定是错误的,导致数据添加不到数据库中,那么使用select()方法也是一样被过滤。

再次,当我单步调试时,断点被过滤的时候,过滤方法使用到了new出来的MODEL,这个MODEL会有一个字段映射的数组在里面,这个过滤方法就是和这个字段数组进行对比,如果不一致就过滤掉,结果我调试发现,new出来的MODEL根本没有把字段映射加进去,数组直接为空,当然就没法和添加的数据字段一一对应了。这就是错误的关键。

下面就来说解决方法,其实很简单,按照基本的MVC结构,不管是PHP还是JAVA还是.NET都有这样的结构,那么按照严格的标准,MODEL层的代码是必须写的,就是要和数据库的字段做映射。但是很多用mysql的,就直接没有去写MODEL里面的代码。这种习惯被用到了oracle中,就出了问题。

5, 下面针对我上面的数据表写出我的代码:

我的Action是这样的:UserAction.class.php。控制器我只对添加和查找做例子,因此代码如下:

public function index() {
  header("Content-Type:text/html; charset=utf-8");
 
  $M_User = new UserModel();
 
  $User_List = $M_User->select();
 
  $this->assign('Title', '用户管理');
 
  $this->assign('UserList', $User_List);
 
  $this->display();
}
 
 //添加用户提交处理
public function Create_Post() {
  $M_User = new UserModel();
  $data['username'] = $this->_post('username');
  $data['password'] = md5($this->_post('pwd'));
 
  if ($M_User->create()) {
   $Query_Result = $M_User->add($data);
   if (false !== $Query_Result) {
    $this->success('用户添加成功');
   } else {
    $this->error('用户添加错误');
   }
  } else {
   header("Content-Type:text/html; charset=utf-8");
   exit($M_User->getError() . ' [ <a href="javascript:history.back()">返 回</a> ]');
  }
}

Action解释:

$M_User=new UserModel();

这个方法最好这么写,因为做.NET的原因,一直都这么写的。针对具体的模型进行实例化,严格规定我就要对User表进行操作了。

获取POST数据的代码就不多解释了。

$M_User->create();

这是ThinkPHP的一个方法,很好,可以帮你过滤掉非法的东西,建议使用。

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

这一段就是数据的添加,我习惯指定要添加的数据,也是因为这一段需要根据$M_User实例化,并过滤字段。当然了,我们只要做好MODEL的代码,就不会有问题。下面的代码就不解释。官方文档都有。

我的Model是这样的:UserModel.class.php

'id', 'username', 'password');

Model解释:这才是重点,这有这样,new出来的$M_User的映射字段数组才不会为空,这样才能和POST的数据进行对应,才会让过滤方法正常识别,不被过滤。

6,经过了以上的操作,针对Oracle的数据库操作就完成了,我现在也可以任意使用ThinkPHP提供的方法来操作数据了,包括分页(limit),find(),findAll等等。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1122892.htmlTechArticleThinkPHP连接Oracle数据库,thinkphporacle 一、操作环境搭建 系统:Windows7 旗舰版 64位 PHP环境:wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24 32位版 下载地...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。