PHP 連線到 MySQL
PHP 5 及更高版本可以使用以下方式處理 MySQL 資料庫:
- MySQLi 擴充套件("i" 代表 improved,即改進版)
- PDO(PHP Data Objects)
早期版本的 PHP 使用了 MySQL 擴充套件。但是,該擴充套件已於 2012 年棄用。
我應該使用 MySQLi 還是 PDO?
如果需要簡短的答案,那就是“隨便你”。
MySQLi 和 PDO 都有各自的優點
PDO 可用於 12 種不同的資料庫系統,而 MySQLi 只能與 MySQL 資料庫配合使用。
因此,如果需要將專案切換到使用另一個數據庫,PDO 可以輕鬆完成。你只需要更改連線字串和一些查詢。使用 MySQLi,你需要重寫整個程式碼,包括查詢。
兩者都是面向物件的,但 MySQLi 還提供過程式 API。
兩者都支援預處理語句。預處理語句可以防止 SQL 注入,並且對於 Web 應用程式安全非常重要。
MySQLi 和 PDO 語法的 MySQL 示例
在本章及後續章節中,我們將演示使用 PHP 和 MySQL 的三種方法:
- MySQLi(面向物件)
- MySQLi(過程式)
- PDO
MySQLi 安裝
對於 Linux 和 Windows:在大多數情況下,當安裝了 php5 mysql 包時,MySQLi 擴充套件會自動安裝。
有關安裝詳細資訊,請訪問: https://php.net.tw/manual/en/mysqli.installation.php
PDO 安裝
有關安裝詳細資訊,請訪問: https://php.net.tw/manual/en/pdo.installation.php
開啟與 MySQL 的連線
在訪問 MySQL 資料庫中的資料之前,我們需要能夠連線到伺服器。
示例(MySQLi 面向物件)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// 建立連線
$conn = new mysqli($servername, $username, $password);
// 檢查連線
if ($conn->connect_error) {
die("連線失敗: " . $conn->connect_error);
}
echo "Connected successfully";
?>
上面面向物件的示例說明
$connect_error 在 PHP 5.2.9 和 5.3.0 之前是無效的。如果你需要確保與 5.2.9 和 5.3.0 之前的 PHP 版本相容,請使用以下程式碼代替:
// 檢查連線
if (mysqli_connect_error()) {
die("Database connection failed: " . mysqli_connect_error());
}
示例(MySQLi 過程式)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
// 建立連線
$conn = mysqli_connect($servername, $username, $password);
// 檢查連線
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
示例(PDO)
<?php
$servername = "localhost";
$username = "username";
$password = "password";
try {
$conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
// 將 PDO 錯誤模式設定為異常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
注意: 在上面的 PDO 示例中,我們還**指定了一個數據庫 (myDB)**。PDO 需要一個有效的資料庫才能連線。如果未指定資料庫,將丟擲異常。
提示: PDO 的一個巨大好處是它有一個異常類來處理資料庫查詢中可能發生的任何問題。如果在 try{ } 塊中丟擲異常,指令碼將停止執行並直接跳轉到第一個 catch(){ } 塊。
關閉連線
指令碼結束時連線將自動關閉。要提前關閉連線,請使用以下方法:
MySQLi 面向物件
$conn->close();
MySQLi 過程式
mysqli_close($conn);
PDO
$conn = null;