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 的連線使用 OOP 版本的 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 = '';

    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 Database