構築するためにまず、動作環境
のWindows7の究極の64ビット:システム
PHP環境:wampserver2.2e-php5.4.3-httpd2.2.22-mysql5.5.24 32 ビットバージョン
ThinkPHP:3.0正式版
のOracle:のOrcale_11gR2 32ビットバージョンの
データベース操作ツール:PLSQL Developerを32ビットの
開発ツール:NetBeans IDEの7.1.2
説明:ここで私は繰り返し、通常の状況下で、我々のシステムが64ビットである、ので、「ビット」ソフトウェアは、これは非常に重要なのは、それは64ビットのソフトウェアを使用するのが最適であることを強調したが、していますここに加えてシステムの外部、すべての32ビットの選択が目的PLSQL DeveloperとWAMP PHP拡張子を持つ理由は、そこにあります。無64ビット版ためPLSQL開発。何人かの友人は、64ビットのOracleデータベースと、ライン上の32ビットクライアントをインストールすることを言った、私は動作モードを好きではない場合は、これを行うにはしたくない渡すことができます。あなたはPLSQL Developerを使用して、Oracle独自のSQL Developerを使用することを選択しない場合はもちろん、あなたは64または32の独自のビジネスフルインストールされています。Oracleデータベースに接続するPHPはPHP拡張もビットデータベースクライアントの数に対応する必要があるため、この拡張機能はまた、データベースクライアントをサポートする必要があり、適切な拡張子を開く必要があります。完成ロングったらしいです。
第二に、環境設定
1、私が言うことはありませんオペレーティングシステムのインストール、Oracleインストール自体ものNetBeans IDE 7.1.2そのもの。
2、私は言っていないWAMPをインストールは、直接それを再学習するDOSから起動しません。
\ WAMP \ WWW:3は、WAMPは、PHPのWeb WWWフォルダ定義ファイルにはDである、内部、私はDドライブにインストールされたWAMPフォルダにインストールされています。私たちは、他のカスタム変更を行いません。WAMP起動し、システムトレイアイコンが緑色を開始するにはOKを示しています。
4、オープンローカルホスト、次のインターフェイスを参照して、基本的な構成は、周囲OKです。Oracleはコンフィギュレーションを設定していないので、なぜ、基本的なものです。5、PHPは緑のアイコンに示すように、拡張メニューを開き、ボタン- > PHP-> PHPエクステンション、拡張子php-OCI8をクリックし、WAMPが再起動されます。この時間は、再起動の緑を待って、それはOKを意味します。図4に示すような表示が見つかった場合6は、再びページを開くだけではlocalhost、それは現在のPHPは、Oracleのサポートを有することを意味します。私はWAMP使用していますし、そのうちの一つが64である場合、Oracleクライアントは、32であることに注意してください、そして、開いたときにOCI拡張、自動環境モニタリングページはOCI8を表示しませんが。PL / SQLを使用せずに、Oracleは合格してください他に、32ビットおよび64ビットと64ビットのOracle WAMPの試合の32ビットWAMPミックスでなければなりません。
リンク:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 抽出コード:x2p5
Xの共有すること自由に、しかし重大な制約、リンクをクリックするか、リンクが検索に加えて、集団グループ番号失敗する936 682 608。
三、ThinkPHP構成
1、コアで良い解凍、唯一ThinkPHPプロジェクトフォルダを、ダウンロードするための公式バージョン3.0。
2、プロジェクトの新しいプロジェクトフォルダを作成するためにIDEを使用すると、他の個人用フォルダをカスタマイズする必要がある場合は、あなたがApacheの設定ファイルを変更する必要があり、ちょうどWAMPを下にwwwフォルダです。私はここでは変更しないでください。
3、プロジェクトフォルダにThinkphpフォルダには、index.phpの名前のPHPファイルを作成します。
:4、IDEは以下を準備し、index.phpのを開いて、これらのファイルに表示された
コードを次のように:
- PHP
- define('APP_DEBUG', true);
- require './ThinkPHP/ThinkPHP.php';
5, 在浏览器中打开localhost/项目名/index.php,Thinkphp会帮你生成好相关文件和文件夹。
6, 对配置文件进行操作,找到:Conf文件夹下config.php文件,修改如下:
. 代码如下:
- php
- return array(
- 'DB_TYPE' => 'Oracle', // 数据库类型
- 'DB_HOST' => '192.168.0.8', // 服务器地址
- 'DB_NAME' => 'orcl', // 数据库名
- 'DB_USER' => 'test', // 用户名
- 'DB_PWD' => 'test', // 密码
- 'DB_PORT' => '1521', // 端口
- );
Oracle数据库和mysql 的结构不同,一般默认安装的数据库名是orcl,如果你使用了多个数据库监听,那么就要根据具体的监听字段来设置。比如:我本机数据库坚挺是Orcl,同时监听另外一个外网的数据库,监听字符串为Orcl2,那么如果你需要连接这个外网数据库,那么需要写的数据库名就是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() . ' [ 返 回 ]');
- }
- }
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
protected $fields = array( 'id', 'username', 'password' );
Model解释:这才是重点,这有这样,new出来的$M_User的映射字段数组才不会为空,这样才能和POST的数据进行对应,才会让过滤方法正常识别,不被过滤。
6,经过了以上的操作,针对Oracle的数据库操作就完成了,我现在也可以任意使用ThinkPHP提供的方法来操作数据了,包括分页(limit),find(),findAll等等。