您现在的位置是:首页 > PHP > 【oracle的使用】在thinkphp5中使用oracle 网站首页 PHP

【oracle的使用】在thinkphp5中使用oracle

Tom2017-08-16 5185人围观
PHP   oracle  
简介 暂无

以前没有用过使用oracle和thinkphp的方式,网上也找了很多了然而就是用的不完美,最后还是花了几天时间搞出来了,最坑的是什么,tp3.2支持oracle,就是thinkphp5不行,咋整,搞他一下,如果做得不标准,请留言,我们互相学习下,所以这里记录一下

连接:

  1. 网上的攻略很少,主要tp5出来还没有多久,那么和oracle的磨合案例就更少了,
  2. 下载一个thinkphp5的完整版,我这里使用的是公司的CMS,(基于TP5开发的 ONETHINK[成熟的后台框架]  和  H+[前端框架]  集合的CMS)
  3. 实验了很多种办法,主流的办法是使用一个vender中的topthink中的一个扩展,think-oracle,但是我没有尝试成功,所以就换了方法
  4. 去找底层代码,发现thinkphp的连接数据库的类中并没有oracle,怎么办,自己照着写一个呗
  5. 所以在\thinkphp\library\think\db的目录下两个文件夹buiderconnector中分别创建了一个Oracle.php连接类,
  6. 照着其他sql的类改了一下,发现还是连接不了,打印了下错误信息,连接参数只能读出database的名称,怎么办?
  7. 找了一下网上的东东,只能在数据库名称那里就把其他的参数配置上,下面我会截图,
  8. 然后就连接成功了,可以查出数据了

移动数据库:

  1. 把mysql的结构和数据移动到oracle中,
  2. 你可以选择一点点重建,也可以使用攻略,我就不写了,太多了,直接放链接《MySQL表与数据向Oracle移植(使用Oracle SQL Developer工具)
  3. 导入好之后,需要重建自增序列,下面会讲,oracle没有所谓的表自增的功能,需要用到序列实现


取值和注意:

  1. oracle数据的字段和表名都要求大写,如果是小写的字段,在添加的时候必须用双引号,把字段名标注起来,这里会是一个非常大的坑,以后会记得的
  2. 在tp5中,使用小写的字段名是取不出来大写字段的值的,在这里去改这个cms我差点废了,
  3. 添加和修改的时候,尽量使用原生查询的方法吧,比如、\think\Db::query(insert into qz_table ("ID","NAME") values('1','三水'));这里需要注意的就是字段名使用双引号,后面的值使用单引号(备注:oracle对字段值的类型验证非常严格,不像mysql,如果定义的是number(int)内型,那么就绝对不能有引号,对于取到就是字符串的数字,需要强制转换为数字类型才可以成功),如果是双引号,oracle会认为是字段,这也是个巨坑,莫踩)
  4. \think\Db::query()方法只能用于查询,我就是搞错了,修改和删除需要使用\think\Db::execute()方法
  5. 重要的一点:oracle建表的时候没有像mysql一样的自增属性,需要些序列来实现 CREATE SEQUENCE XULEI_NAME start with 10 increment by 1 这里意思是:创建一个名字叫XULEI_NAME的序列,从10开始,每次加1
  6. 那么添加的时候怎么自增呢?在需要些ID的地方写 XULEI_NAME.nextval 一定不要加引号,效果\think\Db::query(insert into qz_table ("ID","NAME") values(XULEI_NAME.nextval,'三水'));
  7. 那怎么获取刚刚添加的列的id呢,需要这样,select XULEI_NAME.currval from dual ,这里是查询刚刚添加的那条的id,XULEI_NAME.currval 的值只有在同一次会话中,只有在XULEI_NAME.nextval之后有效,所以不用担心取错值。

建议:

  1. 你可以直接把thinkphp的save方法和insert方法改成适合oracle的效果,不过需要慢慢的调试,我也是搞得不要不要的,最后还是使用了debug来慢慢调试的,这里还是要感谢我们的@文韬武略同学,我以前还没有使用debug调试过php呢
  2. 其他没有了,个人经验有限,欢饮留言

下载:

  1. 最后把我添加的两个类放出来
  2. 放在\thinkphp\library\think\db目录下,只需要把里面的文件Oracle.php放入对应的目录下即可
  3. 我还是地址

打赏本站,你说多少就多少

文章评论

image
2017-08-20 龍龍龍
告诉我 php的黄金搭档是谁? 为什么要用java 的黄金搭档 ? 影响效率
---龍龍龍---: 还有既然你写了db连接类 你要把查询方法封装下 不然写查询 写废你
博主: 公司需求社,人微言轻,没得折
image
2018-02-27 纯白熊猫
按照你的步骤走下去,还是有错误,提示“模块不存在:50x”,这个应该怎么弄呢?
功夫熊猫: 这个问题描述的问题,50x是什么?