免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2406 | 回复: 0
打印 上一主题 下一主题

扰我许久的大问题,请帮忙解决。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-06 15:17 |只看该作者 |倒序浏览
我初用php pdo 碰到pdo 例处无法捕获到的问题。描述如下:
php pdo捕获不到应有的例外
捕获不到 procedure exception
测试的procedure作用是往一个表中插入只有一个字符串(VARCHAR2(8))字段的记录。
字符串就是输入的参数字符串。
测试时,我将输入字符串长度加长,当超过目标表的最大长度时(我用oracle)
按理执行时应是有例处抛出。但这些信息我的代码始终打印不出来,IE则是显示“无法显示该页”
我的系统是 apache php oracle 其中apache 及php都是最新ver

<?php
        $dbh = new PdO("oci:dbname=//10.243.102.110:1522/oracle", "user_name", "passwd",
                        array(PDO::ATTR_PERSISTENT => true)
                );
        $dbh->setattribute(PDO::ATTR_CASE,PDO::CASE_LOWER);
        $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
        $sth=$dbh->prepare("CALL Test_Pdo_P(?)");
        $var='01300000000000000000000000000000000'; //长度超过目标表的最大能容长度。
                                                    //缩短长度一切正常,能往目标表插入记录
        $sth->bindParam(1, $var, PDO::PARAM_STR, 200);
        // $sth->execute();
          if (!$sth->execute()) { //按理应有例处产生并执行以下代码,可是我测试时并没有
                              echo "ERROR:";   //我测试的结果是连这行都无输出,晕。
                                     echo $dbh->errorCode() . "<br/>"; //PDO级别的错误代码
                                     $info=$dbh->errorInfo();  //驱动级级别的错误信息数组
                                             print_r($info);
                                             echo "<br/>";
                                            }
        $dbh=null;
?>

捕获不到 queryexception
另外我测试普通的sql,故意加大数字范围,引发例处,可也是出现同样的现象:ie“无法显示该页”
代码如下:
<?php
    try { echo "下面生成PDO连接"."<br/>";
          $dbh = new PdO("oci:dbname=//10.243.103.121:1522/ill", "user_name", "passwd",
                          array(PDO::ATTR_PERSISTENT => true)
                        );
         $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
         echo "上面生成PDO对象,看到我说明没有出错"."<br/>";
         $sth=$dbh->query("insert into wcr values(3,333)"); //加大数值迫其出错
      $sth=$dbh->query("insert into wcr values(3,3333333333333333333333333)"); //
         echo "没出错显示我哦"."<br/>";
        }
catch (pdoException $e)
    {
      print "Error!: " . $e->getMessage() . "<br/>";
    }
?>

所以我怀疑是不是PDO本身有问题?请各位高手帮忙看看。
另外网上有个列表链接如下:
http://www.nabble.com/Re:-PDO-Ex ... stion-p4211598.html
也是讲述pdoexception无法在IE中打印出来的。

第二贴

我当前主要的问题是: 如果是数据库连接出错,IE上会显示例处信息,告诉你是什么问题造成的,很正常。可一旦不是数据库连接方面的例处,比如 select * from tab 中的tab不存在时,或者是其他sql  query 语句有问题时,IE通通都显示:“无法显示该页” 也就是说
try  { } throw exception 后,catch (pdoexception $e)之后的 { 这里的所有语句都不显示出来,连最简单的echo "error" 也都没有显示。 }
比如第二个例子
$sth=$dbh->query("insert into wr values(3,333)")
我故意把数值加大到超过字段最大能容值,
$sth=$dbh->query("insert into wcr values(3,33333333333333333333333333333)")
按理,应产生例处,并打印在IE上。
但我现在的情况是运行该index.php后,硬盘狂转,好长一段后,ie显示“无法显示该页”。
根本不是显示我要的$e->getMessage().
如果不是故意加大数值,很正常的,页面响应极快
我的apache是默认安装,php也是,都是最新ver的。是不是我的apache或php conf参数还应改动那里?
我已改了 session响应时间为120秒了。
另php.ini
;   - Show all errors, except coding standards warnings
;
error_reporting  =  E_ALL
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP