2011-11-24 42 views
0

我正在處理一個較舊的腳本。有人告訴我,該腳本使用古老的調試方式(文件和行)。調試php。文件和行

我已經發布了一個腳本示例。我應該用什麼來代替FILE和LINE方法?

MySQL的類 -

function error($file, $line) { 
      trigger_error("DB error in *<b>{$file}</b>* on line <b>{$line}</b><br />\n " . mysql_error() . "" . @mysql_error($this->dbl), E_USER_ERROR); 
     } 


     function query($query, $file, $line) { 

      $result = mysql_query($query) or $this->error($file, $line); 
      $this->num_queries++; 

      return $result; 
     } 

標準查詢 -

$DB->query("SELECT * FROM table"), __FILE__, __LINE__); 

回答

2

實際上,你應該使用debug_backtrace這一點。

如:

function error(){ 
    $trace = debug_backtrace(); 
    $file = $trace[1]['file']; // use 1 because you don't want 
           // to include this function! 
           // 2 will be the function which called the function 
           // which called this function. 
    $line = $trace[1]['line']; 
    trigger_error("DB error in *<b>{$file}</b>* on line <b>{$line}</b><br />\n " . 
        // You really should consider using MySQLi instead of MySQL 
        mysql_error() . "" . @mysql_error($this->dbl), E_USER_ERROR); 
        // why do you have two mysql_error calls??? 
} 
+0

檢索錯誤消息非常感謝。你能告訴我如何用新的函數替換當前的函數以及如何調用它?我不知道該怎麼辦... – domino

+0

@domino嗯...你只需更換它?如果你擺脫了'__FILE__'和'__LINE__'這個參數,那麼它應該可以作爲一個標準。 – cwallenpoole

+0

啊是的。 :) 再次感謝。 – domino

0

你應該看看遷移從該自定義數據庫的包裝了。最常見的面向對象庫是MySQLiPDO

這兩個庫都支持錯誤檢查。

MySQLi::query()錯誤時返回false。您可以通過MySQLi::error()

PDO::query()還可以在錯誤時返回錯誤。您可以通過PDO::errorInfo()

+0

這不是一個答案。它應該是一個評論。 – cwallenpoole

+0

@cwallenpoole我不明白這是不是相關的信息。他問道:「我應該用什麼來代替FILE和LINE方法?」這是我推薦他做的。 – hafichuk

+0

@cwallenpoole我實際上覺得很有意思,你相信'$ DB-> query(「SELECT * FROM table」),__FILE__,__LINE __);'是可以接受的。 – hafichuk