PHP で非推奨の Mysql_connect への解決策
この記事では、PHP で廃止された mysql_connect のソリューションについて説明します。これらのソリューションには、mysqli_connect(手続き型および OOP)および PHP データオブジェクト(PDO)が含まれます。
手順 Mysqli_connect を使用して MySQL に接続する
mysqli_connect を使用すると、手続き型プログラミングを使用して MySQL データベースに接続できます。その結果、次のアルゴリズムを使用できます。
-
データベース接続の詳細を定義します。
-
mysqli_connectで接続します。 -
接続が成功した場合は、成功メッセージを表示します。
-
接続に失敗した場合は、エラーメッセージを表示します。
このアルゴリズムは、手順 2 でエラーが発生するまで正常に機能します。このようなエラーは、データベースの詳細が正しくない可能性があります。
PHP がこれらの誤った詳細に遭遇すると、Fatal Error 例外がスローされます。したがって、コードはステップ 3 またはステップ 4 に到達せず、エラーメッセージが表示されます。
これを修正するには、MySQL エラー報告をオフにして、警告を抑制する必要があります。これにより、エラーが発生したときに、ユーザーに機密情報が表示されないようにすると同時に、カスタムエラーメッセージを表示できます。
そうは言っても、変更されたアルゴリズムは次のとおりです。
-
データベース接続の詳細を定義します。
-
MySQL エラーレポートをオフにします。
-
mysqli_connectに接続し、警告を抑制します。 -
接続が成功した場合は、成功メッセージを表示します。
-
接続に失敗した場合は、エラーメッセージを表示します。
このアルゴリズムの実装は次のとおりです。
<?php // The following are the defaults for a // new MySQL installation. You should replace // the $host, $mysql_user, and $mysql_user_password // with your details. $host = 'localhost'; $mysql_user = 'root'; $mysql_user_passowrd = ''; // Turn off error reports like "Fatal Errors". // Such reports can contain too much sensitive // information that no one should see. Also, // turning off error reports allows us to handle // connection error in an if/else statement. mysqli_report(MYSQLI_REPORT_OFF); // If there is an error in the connection string, // PHP will produce a Warning message. For security // and private reasons, it's best to suppress the // warnings using the '@' sign $connect_to_mysql = @mysqli_connect($host, $mysql_user, $mysql_user_passowrd); if (!$connect_to_mysql) { echo "<b style='color: red;'>Failed to connect to MySQL.</b>"; } else { echo "You've made a successful connection to MySQL."; } ?> 接続を成功させるための出力:
You've made a successful connection to MySQL. 失敗した接続の出力:
<b style='color: red;'>Failed to connect to MySQL.</b> オブジェクト指向プログラミングを使用して MySQL に接続する
OOP と mysqli_connect を使用すると、new mysqli() を使用してデータベース接続を作成できます。手順の手法と同様に、接続の詳細を new mysqli() に渡す必要があります。
ただし、これらの詳細にエラーが発生する可能性があるため、エラー処理には try...catch ブロックを使用します。まず、接続の詳細を try ブロックに配置し、エラーが発生した場合は、catch ブロックでそれらをキャッチします。
以下では、MySQL への接続は mysqli_connect の OOP バージョンを使用します。また、接続文字列のエラーが抑制されていることにも気付くでしょう。
<?php // The following are the defaults for a // new MySQL installation. You should replace // the $host, $mysql_user, and $mysql_user_password // with your details. $host = 'localhost'; $mysql_user = 'root'; $mysql_user_passowrd = ''; try { // Connect to the database using the OOP style // of mysqli. $connection_string = @new mysqli($host, $mysql_user, $mysql_user_passowrd); echo "You've made a successful connection to MySQL."; } catch (Exception $e) { // If an error occurs, access the getMessage() // method of the $e object. This gives information // on why the error occurred. echo "<b style='color: red;'>Failed to connect to MySQL :</b> " . $e->getMessage(); } ?> 接続を成功させるための出力:
You've made a successful connection to MySQL. 失敗した接続の出力:
<b style='color: red;'>Failed to connect to MySQL :</b> Access denied for user ''@'localhost' (using password: NO) PDO を使用して MySQL に接続する
PDO を使用して MySQL に接続でき、try... catch ブロックを使用してエラーをキャッチする必要があります。後者は、OOP セクションで学習したのと同じように機能します。
さらに、エラーが発生したときに、ユーザーに機密性の高いエラーメッセージが表示されることはありません。さて、以下は MySQL に接続するための PDO バージョンです。
<?php // The following are the defaults for a // new MySQL installation. You should replace // the $host, $mysql_user, and $mysql_user_password // with your details. $host = 'localhost'; $mysql_user = 'root'; $mysql_user_passowrd = ''; try { // Connect to MySQL using PDO and set PDO // error mode to exception. $connection_string = @new PDO("mysql:host=$host", $mysql_user, $mysql_user_passowrd); $connection_string->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "You've made a successful connection to MySQL."; } catch (PDOException $e) { // If an error occurs, access the getMessage() // method of the $e object. This gives information // on why the error occurred. echo "<b style='color: red;'>Failed to connect to MySQL:</b> " . $e->getMessage(); } ?> 接続を成功させるための出力:
You've made a successful connection to MySQL. 失敗した接続の出力:
Failed to connect to MySQL: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) Habdul Hazeez is a technical writer with amazing research skills. He can connect the dots, and make sense of data that are scattered across different media.
LinkedIn