2010-11-23 6 views
7

pg_connect()はテーブル形式でエラーを表示しています。代わりに、エラーメッセージを表形式で表示するにはエラーメッセージ警告が必要です。pg_connect()関数のエラーをキャッチする方法は?

エラーメッセージ
警告:のpg_connect()[function.pg-接続]:PostgreSQLサーバに接続できません:FATAL:パスワード認証がに/家庭ユーザー "テスト" に失敗しました/テスト/ public_htmlの/ QueueManager/Modules/Database.php on line 41

エラーが表形式で表示された後。
pg_connect()throwed exceptionの実行後です。
しかし、動作していません。

コード

function connect() 
{ 
    $HOST = $GLOBALS[Database_Conn][Db_Host];  # Host name 
    $USER = $GLOBALS[Database_Conn][Db_User];  # database user name 
    $DBNAME = $GLOBALS[Database_Conn][Db_Name]; # name of the database 
    $PASSWORD = $GLOBALS[Database_Conn][Db_Pass]; # password the database user. 

    try 
    { 
    $conn = pg_connect("host=$HOST dbname=$DBNAME user=$USER ". 
         "password=$PASSWORD sslmode=disable"); 
    if(!$conn) 
    { 
     throw new Exception("Database Connection Error"); 
    } 
    return $conn; 
    } 
    catch (Exception $e) 
    { 
    print <<<_HTML_ 
    <script> alert('Caught exception'); 
    </script> _HTML_; 
    die(); 
    } 
} 

例えば、関数呼び出しの前に@を追加し、私はPHPによって生成されたエラーテキストを非表示にするソリューション

+0

この詳細を参照してください...それは一種の例外をキャッチしているときに例外をスローすることを有線ではないですか? (正直な質問ですが、PHPはこの種の例外をスローすることをサポートしています) – DrColossos

+0

はい、PHP 5以降では例外がサポートされています。彼は例外的なものをテストしているので、彼のコードはそうだと思う。問題は、* pg_connectが返される前に*警告:pg_connect()メッセージが生成されていることです。 – intgr

+0

@DrColossos ::おそらく、彼は接続試行で使用されたユーザ名を明らかにするデフォルトの例外を隠そうとしていると思われます。この場合、「パスワード認証に失敗しました。ユーザ "test" ' –

答えて

4

を教えてください:

$conn = @pg_connect("host=$HOST dbname=$DBNAME user=$USER ". 
        "password=$PASSWORD sslmode=disable"); 

もっとdetails here

+0

+ 100。ありがとうございました! – colllin

+2

'pg_connect()'関数が存在しない場合、あなたのスクリプトはまだ消滅しますが、エラーは表示されません。 – AndreKR

15

pg_connect例外をスローしないあなたは以下のような例外に翻訳する必要があります。

function exception_error_handler($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline); 
} 
set_error_handler("exception_error_handler"); 

try { 
    [email protected]_connect("host=dbhost user=dbuser dbname=db password=dbpass"); 
} Catch (Exception $e) { 
    Echo $e->getMessage(); 
} 

http://php.net/manual/en/language.exceptions.php

関連する問題