两个代码段
1。
<?php 
$dsn = 'mysql:host=localhost;dbname=testdb'; 
$user = 'dbuser'; 
$password = 'dbpass'; 
try { 
$dbh = new PDO($dsn, $user, $password); //创建数据库连接对象容易出现异常 
echo '如果上面出现异常就不能显示我了'; 
} catch (PDOException $e) { 
echo 'Connection failed: ' . $e->__toString(); 

?> 2。
<?php
  class dbmysql{
   protected $local;
protected $root;
protected $pw;
protected $dbname; function __construct($local,$root,$pw,$dbname){
$this->local = $local;
$this->root  = $root;
$this->pw  = $pw;
$this->dbname= $dbname;
$this->connect();

}
function connect(){
try{
  $conn = mysql_connect($this->local,$this->root,$this->pw); 
  echo '如果上面出现异常就不能显示我了'; 
  }catch(Exception $e){
  echo '问题是:'. $e->__toString();
          } 
         }
  }
         $nov = new dbmysql("localhost","root","d","dbshop");
?> 不知道为什么第一个可以获取到出错,第二个代码的try--catch根本没用。运行错误直接就报错了。
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in D:\xampp\htdocs\web-shop\webadmin\from\from.php on line 25
如果上面出现异常就不能显示我了 为啥会这样?非常不明白。。麻烦路过的高人指点一二,

解决方案 »

  1.   

    手上没有工具测试……你把第二个例子中的构造函数改一下,先不要在里面直接调用connect(),而是等对象构造完毕后在类代码外调用对象的connect()看看能否抛出异常。
      

  2.   

    靠!看错题目……类似的题目好像以前有人问过了。mysql_connect并不会在连接失败的时候抛出异常,而只是简单返回一个false。所以,你不可能用try...catch来捕捉mysql_connect的异常——因为根本没有异常可捉。如果你一定要在你自己的数据库操作类中使用,应该尝试在connect()函数中判断mysql_connect的返回,如果是false,则要手工抛出一个异常才对。