PHP で非推奨の Mysql_connect への解決策

Habdul Hazeez 2023年1月30日
  1. 手順 Mysqli_connect を使用して MySQL に接続する
  2. オブジェクト指向プログラミングを使用して MySQL に接続する
  3. PDO を使用して MySQL に接続する
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
Habdul Hazeez avatar Habdul Hazeez avatar

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

関連記事 - MySQL Connection

関連記事 - MySQL Database