ThinkPHP 连接Oracle数据库的详细教程(2)

最近收集了一些关于THinkPHP连接Oracle数据库的问题,有很多朋友按照连接mysql的方法来操作,导致有一些方法在Oreale中无法正常使用。比如说:findAll,Select方法无法使用,获取不到需要的数据。Create和add方法无法创建和写入数据到数据库中。

最近收集了一些关于THinkPHP连接Oracle数据库的问题,有很多朋友按照连接mysql的方法来操作,导致有一些方法在Oreale中无法正常使用。比如说:findAll,Select方法无法使用,获取不到需要的数据。Create和add方法无法创建和写入数据到数据库中。

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

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

2,表结构如下:

ThinkPHP 连接Oracle数据库的详细教程(2)

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

4,    ThinkPHP中,是控制器,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表进行操作了。

立即学习“PHP免费学习笔记(深入)”;

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

 代码如下复制代码 $M_User->create();

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

 代码如下复制代码 $Query_Result = $M_User->add($data);

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

 

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

 代码如下复制代码 ?protected $fields = (
            ‘id’, ‘username’, ‘password’
        );

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

 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1839206.html

(0)
上一篇 2025年2月21日 23:00:43
下一篇 2025年2月21日 23:00:57

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • php与thinphp区别是什么

    php与thinphp区别是:1、PHP是一种编程语言,而ThinkPHP则是一个基于PHP语言开发的快速、高效、免费的Web应用程序开发框架;2、PHP具有广泛的兼容性和更高的灵活性几乎所有操作系统上运行,而ThinkPHP只适用于PHP…

    2025年2月23日
    100
  • thinkphp修改路由的方法有哪些

    thinkphp修改路由的方法有两种:1、在route.php文件中使用rule()方法直接将news路由修改成article路由,代码为“rule(‘article’,’index/News/index…

    2025年2月23日
    100
  • PHP小程序生成器有哪些

    目前有以下 PHP 小程序生成器:OneBase、PHP-Minapp、PHP-WeApp 和 Webminapp。在选择生成器时,应考虑支持的框架、生成的小程序类型、功能、开源与否和社区支持。使用 PHP 小程序生成器具有快速开发、代码维…

    2025年2月23日
    100
  • ThinkPHP3.2.3如何从php5升级到php7

    本篇文章给大家介绍一下thinkphp3.2.3从php5升级到php7的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 首先ThinkPHP3.2.3支持php7吗, 绝对支持。 windows下,之前用的项目是部…

    2025年2月23日 编程技术
    100
  • 宝塔面板官网

    宝塔面板官网:https://www.bt.cn/new/index.html 宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率。例如:创建管理网站、FTP、数据库,拥有可视化文…

    2025年2月22日
    100
  • oracle cosh exp floor in log等函数

    21.返回一个数字反余弦值     SQL> select cosh(20) from dual;     COSH(20)   ———     242582598     22.EXP     返…

    数据库 2025年2月21日
    100
  • Oracle数据库几种关闭方式

    、shutdown normal     正常方式关闭数据库。  2、shutdown immediate     立即方式关闭数据库。     在SVRMGRL中执行shutdown immediate,数据库并不立即关闭,     而是…

    数据库 2025年2月21日
    100
  • oracle ceil cos ascii chr函数

    1. ascii     返回与指定的字符对应的十进制数;     SQL> select ascii(A) A,ascii(a) a,ascii(0) zero,ascii( ) space from dual;     A A Z…

    数据库 2025年2月21日
    100
  • ORACLE数据库简介

    一、概论      ORACLE 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地  讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客  户/服务器(CLIENT/SERVER)体系结构的数据库之一。  二…

    数据库 2025年2月21日
    100
  • ORACLE数据库查询表实例代码

    一,查询表基本信息     select     utc.column_name,utc.data_type,utc.data_length,utc.data_precision, utc.data_Scale,utc.nullable,u…

    数据库 2025年2月21日
    100

发表回复

登录后才能评论