2017-03-08 9 views
1

mysqliが 'ER_BAD_DB_ERROR'/1049のエラー定数を返す場合、データベースを構築するためにクエリを実行できるようにします。ここに私のコードです。エラーが検出された場合、私はmysqliにエラーを表示させずに、データベースを構築するだけです。mysqliがエラー定数 'ER_BAD_DB_ERROR'を返す場合はデータベースを構築

未知のデータベースエラーが表示されると、if()ステートメントでエラーが発生し、データベースが構築されます。

このためにエラーを表示する場合、私はmysqliの実現:

$connection = mysqli_connect($db_server, $db_user, $db_pwd, $dbname); 

私がしたいこと、正確なエラーがキャッチされた場合にどのように私は、エラーを表示する代わりにデータベースを構築します。

$db_server = "localhost"; 
$db_user = "user"; 
$db_pwd = ""; 
$dbname = "name"; 

#connect to database 
$connection = mysqli_connect($db_server, $db_user, $db_pwd, $dbname); 

#try to catch database not exist error 
if ('ER_BAD_DB_ERROR') { 
    # if true build database and connect again 
    build_db(); 
    $connection = mysqli_connect($db_server, $db_user, $db_pwd, $dbname); 
} else { 
    #close connection with other errors encounter 
    die("database connection failed". mysqli_connect_error()); 
} 

ここでベストプラクティスを実行しているかどうかはわかりません。だから、私は全面的に提案とフィードバックを開いています。みんなありがとう。 -

+2

ここで、 'build_db()'のコードは? – Fawzan

+0

これもチェックしてください。 http://stackoverflow.com/questions/3131442/how-do-i-create-a-database-if-it-doesnt-exist-using-php – Fawzan

答えて

1

あなたは

例からのエラーコードを返します:

$link = mysqli_connect('localhost', 'user', 'password', 'my_db'); 

// check if the connect call returned a database object 
if (!$link) { 
    // check the particular error number why the connect failed 
    if (mysqli_connect_errno() === ER_BAD_DB_ERROR) { 
     // the database does not exist, so build it now 
     build_db(); 
    } else { 
     // something else caused the connect to fail 
    } 
} 

をこれが一定のER_BAD_DB_ERRORが存在を前提としています。私はそれがあるかどうかチェックしていない。存在しない場合は、mysqli_connect_errnoが返す正しいエラーコードに対応する値で定義する必要があります。

mysqli_connect_error()を使用して、エラーのテキスト表現を取得し、それをエラーコードの代わりに比較することもできます。エラーコードを検索する場合にPHPマニュアルを引用

クライアント・エラー・メッセージ番号はMySQLのerrmsg.hヘッダファイルに記載されている

、サーバ・エラー・メッセージ番号はmysqld_error.hに記載されています。 MySQLソースディストリビューションでは、Docs/mysqld_error.txtファイルにエラーメッセージとエラー番号の完全なリストがあります。

これでも、欠落しているデータベースに関するメッセージが表示されることに注意してください。この特定のエラーのためにcustom error handlerを導入するか、mysqli_connectコールの前にエラー抑制オペレータを配置することができます。それを@mysqli_connectに変更してください。

+0

ありがとうございました。エラー抑制演算子を使用して動作させましたが、他のすべてのエラーが表示されないようにします。私はユーザーとパスワードを忘れてしまっただけで、データベースが存在しなければそれを構築します。このエラー(ER_BAD_DB_ERROR)のみを表示しないようにする方法はありますか? –

+0

@ NathanSiafa上記のコードは、この特定のエラー 'ER_BAD_DB_ERROR'が発生したときに' build_db() 'を呼び出すべきです。それ以外のエラーはelseブロックに送られます。また、[mysqli_connect_error()](http://php.net/manual/en/mysqli.connect-error.php)を使用してエラーのテキスト表現を取得し、それをエラーコードの代わりに比較することもできます。 – Gordon

+0

大変申し訳ございません。私はbuild_db()内に私が持っていた接続を上書きしていた別の接続があったことを認識しています。本当にありがとう。 –

関連する問題