2011-11-24 9 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 Um ...あなたは単にそれを置き換えますか?あなたが '__FILE__'と' __LINE__'引数を取り除くと、これはスタンドとして機能するはずです。 – cwallenpoole

+0

ああ、そうです。 :) 再度、感謝します。 – domino

0

あなたは離れて、このカスタムデータベースラッパーからの移行をご覧ください。最も一般的なオブジェクト指向ライブラリはMySQLiPDOです。

これらのライブラリはどちらもエラーチェックをサポートしています。

MySQLi::query()はエラー時にfalseを返します。エラーメッセージを取得するには、MySQLi::error()

PDO::query()もエラー時にfalseを返します。エラーメッセージを取得するにはPDO::errorInfo()

+0

これは答えではありません。それはコメントでなければなりません。 – cwallenpoole

+0

@cwallenpooleこれは関連性の高い情報ではありません。彼は「FILEとLINEの代わりに何を使うべきか」と尋ねました。これが彼のお勧めです。 – hafichuk

+0

@cwallenpoole私は実際にあなたが '$ DB-> query(" SELECT * FROM table ")、__FILE__、__LINE __);が受け入れられると信じるのはかなり面白いと思います。 – hafichuk

関連する問題