CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  PHP

高手请指点!关于OCIExecute的奇怪问题,回复也有分!

楼主superswords(supersword)2005-02-04 13:31:36 在 Web 开发 / PHP 提问

我是PHP的新手,关于OCIExecute的参数,我只知道:  
  OCI_DEFAULT   是不自动commit  
  OCI_COMMIT_ON_SUCCESS   是自动commit;  
   
  现在有这样一个问题  
  下面是一段程序,省略了一些步骤  
  1)   $con   =   dbConnect();                                                               //   取得DB连接,OCILogon  
  2)   $userNo   =   getUserSeqNo($con,   $uid);                               //   查询操作  
  3)   updateMail($email,   $userId,   $con);                                 //   更新操作  
  4)   $magaName[$index]   =   getMailMagaName($para_type);     //   查询操作  
  5)   dbCommit($con);                                                                       //   调用OCICommit  
  6)   dbClose($con);                                                                         //   关闭DB连接,OCILogoff  
   
  在程序执行中,所有的OCIExecute都是使用的OCI_DEFAULT,没有任何错误发生,其中2)和3)是使用1)取得的DB连接。  
  4)是自己建立新的连接然后关闭,只执行一条select,   也是OCI_DEFAULT的,没有调用OCICommit();  
   
  现在问题是,虽然没有检测到任何错误,但是3)的更新没有成功。但是如果把4)的OCIExecute的参数改为OCI_COMMIT_ON_SUCCESS,3)的更新就可以成功。  
   
  这是为什么?4)和其他的步骤不是两个transaction吗?怎么会有影响?  
   
  请各位高手指点! 问题点数:100、回复次数:12Top

1 楼piner(nadmin 简称难民)回复于 2005-02-04 13:58:24 得分 10

当然要commit了Top

2 楼butcher2002(我又出来捣乱了)回复于 2005-02-04 14:39:39 得分 40

因为第一条是0  
   
  比如4条  
   
  是  
  0,1,2,3Top

3 楼superswords(supersword)回复于 2005-02-04 15:30:36 得分 0

to     piner(天下加油站)    
        4)是单独的一个事务,并且只是select,   我觉得对其他的操作不应该产生影响啊  
   
   
  to   butcher2002(发言仅代表个人观点,不保证正确)    
        什么意思?能不能解释清楚一些?Top

4 楼piner(nadmin 简称难民)回复于 2005-02-04 15:49:22 得分 35

$db   =   new   DB;  
   
  $db->query(update   tb   set   a='a'   where   id=1);  
  $db->query(update   tb   set   b='b'   where   id=2);  
  $db->query(update   tb   set   c='c'   where   id=3);  
   
  $db->   commit();  
   
  你说这样会不会三个语句都执行呢?你用的是同一个会话,所以在4)做commit,3)会更新成功是没错的  
  Top

5 楼superswords(supersword)回复于 2005-02-04 16:11:59 得分 0

如果是用的一个connect,当然可以理解。  
  可是4)和其他的语句用的不是一个connect。  
   
  况且,我在5)也做了commit,为什么如果4)不做commit,   3)就会失败呢?  
  难道我对事务的概念理解有误?Top

6 楼superswords(supersword)回复于 2005-02-05 18:31:10 得分 0

自己顶  
  Top

7 楼leyan728(乐言)回复于 2005-02-07 17:22:07 得分 5

oracle函数库.呵呵,还在学习中.Top

8 楼kkobebryant(分手不是我的本意)回复于 2005-02-07 20:12:24 得分 5

新年快乐!  
  Top

9 楼jimnet(jim)回复于 2005-02-08 05:41:26 得分 5

学习。顶Top

10 楼superswords(supersword)回复于 2005-02-16 13:39:52 得分 0

???Top

11 楼superswords(supersword)回复于 2005-03-11 14:34:21 得分 0

??Top

12 楼superswords(supersword)回复于 2005-05-18 14:51:08 得分 0

唉,终于找到答案了。  
   
  原因是在PHP里面,一个transaction没有结束前,再去连接同一个DB的话就会出问题,导致前一个连接关闭。  
   
  所以正确的应该是在4)中不用新建立连接,而是使用既存的连接。Top

相关问题

  • 奇怪,菜问题,请指点!!
  • 奇怪的输出,请高手指点
  • socket奇怪问题请高手指点
  • 高手指点XML奇怪问题
  • 奇怪,太奇怪了,请高人指点...,..
  • poi到出excel文件的奇怪问题!~~~请大家指点指点
  • 求自动回复邮件代码!请高手指点!
  • DBgrid列可见性控制错误,真奇怪,高手指点
  • pb7.0中FORMAT格式的奇怪问题,请高手指点
  • 急!!很奇怪的问题,请高手指点。谢谢。

关键词

  • 连接
  • 执行
  • db
  • ociexecute
  • commit
  • oci
  • 更新
  • 操作
  • con
  • 问题

得分解答快速导航

  • 帖主:superswords
  • piner
  • butcher2002
  • piner
  • leyan728
  • kkobebryant
  • jimnet

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo