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