2009-11-06 88 views
0

请参阅我以前的帖子here。我做了相应的更改,但出现错误。 请帮我弄清楚这段代码中的错误。我的IDE(集锦)是给这个代码的多行红色下划线:自定义错误处理程序的问题

<?php 

/* Include dependency */ 
require_once("./Config/dbconfig.php"); 

abstract class dbconnection 
{ 
    var $conn; 
    try 
    { 
     //Opens connection for a MySQL DB 
     public function OpenConnection() 
     { 
      $conn = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) 
       or die (throw new DB_Exception_Handler('Cannot connect to DB: ' . $thisException->getMessage() . '.')); 
      mysql_select_db(DB_NAME) or 
      die (throw new DB_Exception_Handler('Cannot connect to DB: ' . $thisException->getMessage() . '.')); 

     } 

     //Closes connection for a MySQL DB 
     public function CloseConnection() 
     { 
      mysql_close($conn); 

     } 
    } 
    catch(DB_Exception_Handler($thisException) 
    { 
     $thisException->ShowError(); 
    } 
} 

class DB_Exception_Handler extends Exception 
{ 
    public function ShowError() 
    { 
     echo "<script>alert('". $this->getMessage() ."');</script>"; 
    } 
} 
?> 

回答

2

事情,我注意到在类内,但没有一个方法中一个try catch块。 并在期望字符串或int(die())的函数调用中引发新的异常。

如果使用@符号表示抑制错误消息,则两个数据库函数都会在失败时返回false。

此外,您正在调用一个函数对引用$ thisException不存在当前作用域看起来。但这可能是因为不是你所有的代码都在这里。

<?php 

/* Include dependency */ 
require_once("./Config/dbconfig.php"); 

abstract class dbconnection { 
    var $conn; 

     //Opens connection for a MySQL DB 
     public function OpenConnection() { 
      $conn = @mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 
      if(!$conn) { 
       throw new DB_Exception_Handler('Cannot connect to DB: ' . mysql_error() . '.'); 
      } 
      if(mysql_select_db(DB_NAME) == false) { 
       throw new DB_Exception_Handler('Cannot connect to DB: ' . mysql_error() . '.'); 
      } 

     } 

     //Closes connection for a MySQL DB 
     public function CloseConnection() 
     { 
       mysql_close($conn); 

     } 

} 

class DB_Exception_Handler extends Exception 
{ 
    public function ShowError() 
    { 
     echo "<script>alert('". $this->getMessage() ."');</script>"; 
    } 
} 
?>