2013-06-04 21 views
7

ローカルサイトのDBに接続する必要があるPHPスクリプトがあります。ローカルDBが利用できない場合は、リモートサーバのDBに接続しようとする必要があります。php mysql_connect警告を無効にする

$dblink = mysql_connect(DBHOST_LOCAL, DBUSER, DBPASS) or $RC = 1; 
if($RC) { 
    $dblink = mysql_connect(DBHOST_REMOTE, DBUSER, DBPASS) or die('Could not connect'.mysql_error()); 
} 

問題は、最初に接続が失敗した場合、警告メッセージをページに表示したくないということです。 mysql_connect()関数の警告メッセージだけを無効にする方法はありますか?

+7

'mysql_ *'は推奨されなくなりましたので使用しないでください。代わりに 'PDO'または' mysqli_ * 'を使用してください – DonCallisto

+3

あなたは本当に'または$ RC = 1'部分を削除するべきです。'!$ dblink'を確認するだけです。 – ThiefMaster

+1

これは、mysqliやPDOを使用した場合には例外をキャッチすることで、より洗練された処理が可能です。** deprecated ** mysql APIではなく、これを行うべきです。 – deceze

答えて

8

ので、警告/エラー・メッセージを抑制するようにはい、そして一度独自のエラーを行い、@記号を追加します。

$dblink = @mysql_connect(DBHOST_LOCAL, DBUSER, DBPASS); 

if (!$dblink) 
{ 
    $dblink = @mysql_connect(DBHOST_REMOTE, DBUSER, DBPASS);     
} 

if (!$dblink) 
{ 
    $message = sprintf(
     "Could not connect to local or remote database: %s", 
     mysql_error() 
    ); 
    trigger_error($message); 
    return; 
} 

は、あなたがあなた自身を報告し、すべてのエラーを処理する必要があるように注意してください。このようなコードは、間違いを起こした場合に備えてデバッグするのが難しいです。接続が失敗した場合には、if文が真であることが原因となりますブール値を返し、

if (!$connection = mysql_connect(DBHOST_LOCAL, DBUSER, DBPASS)) { 
    die('And here we connect to the other server'); 
} 

+4

'@'は決して使用しないでください。代わりにエラー処理を使用してください! – HamZa

+4

* sidenote:*廃止予定の 'mysql_ *'関数の使用を止めてください。代わりにMySQLiまたはPDOを使用してください。 '@'を使うことは、処理することを抑止することです。あなたがエラーを抑制していることに気づいていて、それを処理していることがわかっているならば、Try-Catchを使ってください。 – Raptor

+4

@HamZa '@'はうまくいきます!この場合、彼は接続が成功したかどうかをチェックしています。*エラーが予想されます。彼はエラーメッセージをスクリーンに印刷させないだけです。できるだけ '*' *を使うべきではありませんが、あなたが何をしているのかを知っているときは決して使用しないという意味ではありません。 – deceze

0

は、次の方法を使用することはできません。

+1

それでも、OPが避けようとしているものをそのまま画面に表示します。 – deceze

4

あなたがspeacificページのためだけにあなたの必要性ちょうどこの

のようにページに先頭に設定

# config.ini 
# PHP error reporting. supported values are given below. 
# 0 - Turn off all error reporting 
# 1 - Running errors 
# 2 - Running errors + notices 
# 3 - All errors except notices and warnings 
# 4 - All errors except notices 
# 5 - All errors 

Doc

ごとに設定

をエラーをオフにするerror_reporting(0);を報告し、エラーや警告を設定することができます

<?php 

     error_reporting(E_ERROR | E_WARNING | E_PARSE); 

?> 

私は彼ができるかどうか教えてくださいあなたにはもっと多くのものがあります。

+0

レポーティングレベルを下げることでエラーを隠すことはありません! – Ochi

+0

@Ochi – liyakat

+0

いいえ - あなたが提案しているものは、他のすべてのエラーが抑止されて終了する - それはさらに深刻な問題につながる可能性があります。 – Ochi

2

適切な解決策は、PHPエラー、警告、および通知をユーザに表示しないようにすることです。これはあなたのphp.iniの設定ファイルのdisplay_errors設定を経由して行うことができます。

display_errors = Off 

またini_set()を経由して実行時に設定することができます。

ini_set('display_errors', '0'); 

Manualから:

display_errors
エラーを印刷するかどうかを決定します。出力の一部として画面に表示されるか、ユーザーから非表示にするかを指定します。

このようにすると、ユーザーは機密のPHPエラーメッセージを見ることができなくなりますが、ログファイルには印刷できます。

抑止方法を使用すると、あなたが望むことはできますが、他のPHPエラー/警告がユーザーに表示される可能性があります。これらのエラーには、機密情報。

+0

はい、いいえ。あなたは確かに正しいですが、開発中に少なくとも予期せぬエラーの表示を抑止したくはありません。 OPは非常に具体的な*予想*エラーを抑制したいと思っています。 – deceze

+1

@deceze開発中にエラーを表示するのは個人的な開発者の好みです。ページの構造とメッセージが印刷されるポイントによっては、表示>ソースを実行せずに実際にブラウザでエラーが表示されないことがあるため、画面のエラーに頼るとエラーが発生する可能性があります。 – MrCode

関連する問題