try {
$pdo=new PDO($dsn, $db_user, $db_pwd);
$sql=$pdo->Query('select id,username from users2'); //users2表不存在,为了制造错误
......
}
catch (Exception $e) {
die('数据库连接或查询失败');
}
这样一段很简单的代码,为什么try{}内部仅能捕获到pdo对象创建失败的错误,而捕获不到users2表不存在的错误?
我知道用$pdo->errorCode()可以获取pdo的错误信息,但这样的话,如果我还必须每条语句都用if(!$)来设置一下错误陷阱?那多麻烦啊?
php手机上说用try{}可以捕获到pdo的查询错误,其实根本不是啊。

解决方案 »

  1.   

    这个PDO类有没有把异常抛出到 $e,如果有抛出的话,就可以在catch里抛出异常来只有判断后(if)才能向catch抛出异常...不然除非报错了..
      

  2.   

    那这么说,这段代码中的try仅能捕获到$pdo=new PDO()这一句的错误了,其它全捕获不到,只能自己用if来判断sql查询是否有错。
      

  3.   

    顺便问一下,在mysql中做select * from users where id=10这样只可能有一条记录的查询,如果加了limit 1的话,会不会效率更高点?
    我个人觉得如果不加的话,mysql全遍历全表去找id是否还有=10的记录,是不是这样?
      

  4.   

    不是...$usrname = "cww";  // $usrname 我要定义的最少长度为6;不用 if .. 判断抛出的话,肯定是不会抛出异常的,除非有错
      

  5.   

    那是不是可以理解为try仅能捕获php脚本的错误,而mysql的错误需要自己根据errorCode之类的返回值来判断了?
      

  6.   

    那是不是可以理解为try仅能捕获php脚本的错误,而mysql的错误需要自己根据errorCode之类的返回值来判断了?