手机版

thinkphp中连接oracle时封装方法不可用的解决方案

时间:2021-11-19 来源:互联网 编辑:宝哥软件园 浏览:

最近收集了一些关于THinkPHP连接Oracle数据库的问题,很多朋友都沿用了连接mysql的方法,导致一些方法在Oreale中无法正常使用。比如findAll,无法使用Select方法,无法获取所需数据。创建和添加方法无法创建数据并将数据写入数据库。其实根据之前的问题,我已经做了好几天的调试,发现了问题,并在自己的小项目实践中成功正常使用,所以现在就和大家分享一下我的经验。1.我不会谈论数据库的连接和配置文件的内容,如上所述。我将只根据一个数据表的例子来说明我的操作。2.表结构如下:

3.该表有三个字段,身份证主键,用户名和密码。由于oracle数据库将表名和字段转换为大写,并且不支持ID主键的自增,所以我不得不使用其他方法来实现这个功能,比如ID自动序列触发器就实现了ID的自增。4.在ThinkPHP中,Action是控制器,Model是模型,视图以模板的形式体现。首先来说说控制器。我只介绍添加和获取列表的方法。其次,说到模特,这是成功的主要原因。为什么呢?ThinkPHP有字段映射,非常适合MYSQL。它基本上不需要写MODEL,但是对ORALCE不起作用。当使用M-add()添加数据时,字段将被$this-_facade()方法过滤掉。这样生成的SQL语句无法执行,而且肯定是错误的,所以数据无法添加到数据库中,所以select()方法也被过滤掉了。第三,当我进行单步调试时,当过滤断点时,过滤方法使用了来自new的MODEL,其中有一个字段映射数组。这个过滤方法是将它与这个字段数组进行比较,如果不一致就过滤掉。结果我发现new来的MODEL根本没有添加字段映射,数组直接是空的,当然也不可能一一对应添加的数据字段。这是错误的关键。下面的解决方法其实很简单。按照基本的MVC结构,不管是PHP、JAVA还是。NET,那么按照严格的标准,必须编写MODEL层的代码,也就是必须与数据库的字段进行映射。但是许多使用mysql的人并不直接在MODEL中编写代码。当这个习惯被用在神谕中时,它就出了问题。5.为上面的数据表写我的代码:我的行动是这样的:UserAction.class.php。我只举添加和搜索控制器的例子,所以代码如下:复制的代码如下:公共函数index(){ header(' content-type : text/html;charset=utf-8 ');$M_User=新用户模型();$ User _ List=$ M _ User-select();$this-assign('Title ','用户管理');$this-assign('UserList ',$ User _ List);$ this-display();}//添加用户提交处理公共函数create _ post(){ $ m _ user=new user model();$ data[' username ']=$ this-_ post(' username ');$ data[' password ']=MD5($ this-_ post(' pwd '));if($ M _ User-create()){ $ Query _ Result=$ M _ User-add($ data);如果(假的!==$Query_Result) {$this-success('用户添加成功');} else {$this-error('用户添加的错误');} } else { header(' Content-type : text/html;charset=utf-8 ');Exit ($ m _ user-geterror()。[a href=' JavaScript 3360 history . back()'返回/a]');} }动作说明:复制代码如下: $ M _ User=new User model();这个方法最好这样写,因为总是因为做的原因这样写。NET。实例化具体模型,严格规定我来操作User表。对于获取开机自检数据的代码没有太多解释。复制代码如下: $ M _ User-create();这是ThinkPHP的一个方法,非常好,可以帮你过滤掉非法的东西。建议使用。复制代码如下: $ query _ result=$ m _ user-add($ data);这一段是数据的补充。我习惯于指定要添加的数据,也是因为这一段需要根据$M_User进行实例化并过滤字段。当然,只要我们做好MODEL的代码,就不会有问题。下面的代码没有解释。官方文件里有。我的模型是这样的:UserModel.class.php复制代码如下:受保护的$ field=array(' id ',' username ',' password ');车型说明:这是重点。这样来自new的$M_User的映射字段数组就不会为空,这样就可以对应POST的数据,过滤方式可以正常识别,不被过滤。6.完成上述操作后,Oracle的数据库操作就完成了。现在我可以随意使用ThinkPHP提供的方法来操作数据,包括分页(limit)、find()、findAll等等。

连接到mysql可能没有问题,但是在oracle中,当无法调用封装的方法时,必须在模型层中添加字段的定义。

版权声明:thinkphp中连接oracle时封装方法不可用的解决方案是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。