您现在的位置是:首页 > PHP > 【oracle的使用】在thinkphp5中使用oracle 网站首页 PHP
【oracle的使用】在thinkphp5中使用oracle
简介
暂无
以前没有用过使用oracle和thinkphp的方式,网上也找了很多了然而就是用的不完美,最后还是花了几天时间搞出来了,最坑的是什么,tp3.2支持oracle,就是thinkphp5不行,咋整,搞他一下,如果做得不标准,请留言,我们互相学习下,所以这里记录一下
连接:
- 网上的攻略很少,主要tp5出来还没有多久,那么和oracle的磨合案例就更少了,
- 下载一个thinkphp5的完整版,我这里使用的是公司的CMS,(基于TP5开发的 ONETHINK[成熟的后台框架] 和 H+[前端框架] 集合的CMS)
- 实验了很多种办法,主流的办法是使用一个vender中的topthink中的一个扩展,think-oracle,但是我没有尝试成功,所以就换了方法
- 去找底层代码,发现thinkphp的连接数据库的类中并没有oracle,怎么办,自己照着写一个呗
- 所以在\thinkphp\library\think\db的目录下两个文件夹buider和connector中分别创建了一个Oracle.php连接类,
- 照着其他sql的类改了一下,发现还是连接不了,打印了下错误信息,连接参数只能读出database的名称,怎么办?
- 找了一下网上的东东,只能在数据库名称那里就把其他的参数配置上,下面我会截图,
- 然后就连接成功了,可以查出数据了
移动数据库:
- 把mysql的结构和数据移动到oracle中,
- 你可以选择一点点重建,也可以使用攻略,我就不写了,太多了,直接放链接《MySQL表与数据向Oracle移植(使用Oracle SQL Developer工具)》
- 导入好之后,需要重建自增序列,下面会讲,oracle没有所谓的表自增的功能,需要用到序列实现
取值和注意:
- oracle数据的字段和表名都要求大写,如果是小写的字段,在添加的时候必须用双引号,把字段名标注起来,这里会是一个非常大的坑,以后会记得的
- 在tp5中,使用小写的字段名是取不出来大写字段的值的,在这里去改这个cms我差点废了,
- 添加和修改的时候,尽量使用原生查询的方法吧,比如、\think\Db::query(insert into qz_table ("ID","NAME") values('1','三水'));这里需要注意的就是字段名使用双引号,后面的值使用单引号(备注:oracle对字段值的类型验证非常严格,不像mysql,如果定义的是number(int)内型,那么就绝对不能有引号,对于取到就是字符串的数字,需要强制转换为数字类型才可以成功),如果是双引号,oracle会认为是字段,这也是个巨坑,莫踩)
- \think\Db::query()方法只能用于查询,我就是搞错了,修改和删除需要使用\think\Db::execute()方法
- 重要的一点:oracle建表的时候没有像mysql一样的自增属性,需要些序列来实现 CREATE SEQUENCE XULEI_NAME start with 10 increment by 1 这里意思是:创建一个名字叫XULEI_NAME的序列,从10开始,每次加1
- 那么添加的时候怎么自增呢?在需要些ID的地方写 XULEI_NAME.nextval 一定不要加引号,效果\think\Db::query(insert into qz_table ("ID","NAME") values(XULEI_NAME.nextval,'三水'));
- 那怎么获取刚刚添加的列的id呢,需要这样,select XULEI_NAME.currval from dual ,这里是查询刚刚添加的那条的id,XULEI_NAME.currval 的值只有在同一次会话中,只有在XULEI_NAME.nextval之后有效,所以不用担心取错值。
建议:
- 你可以直接把thinkphp的save方法和insert方法改成适合oracle的效果,不过需要慢慢的调试,我也是搞得不要不要的,最后还是使用了debug来慢慢调试的,这里还是要感谢我们的@文韬武略同学,我以前还没有使用debug调试过php呢
- 其他没有了,个人经验有限,欢饮留言
下载:
- 最后把我添加的两个类放出来
- 放在\thinkphp\library\think\db目录下,只需要把里面的文件Oracle.php放入对应的目录下即可
- 我还是地址
打赏本站,你说多少就多少
上一篇:【抓取网页】的一些注意事项
下一篇:【ip改版】网站统计地图修改