在PHP中,連接 MySQL 數(shù)據(jù)庫(kù)有幾種常用的方式。以下是幾種常見(jiàn)的連接 MySQL 數(shù)據(jù)庫(kù)的方法。
1. 使用 mysqli(MySQL Improved)擴(kuò)展
mysqli 是 PHP 中用于操作 MySQL 數(shù)據(jù)庫(kù)的擴(kuò)展,它支持面向?qū)ο蠛兔嫦蜻^(guò)程的方式。這里介紹兩種常見(jiàn)的連接方式:面向過(guò)程和面向?qū)ο蟆?/p>
1.1 面向過(guò)程方式連接數(shù)據(jù)庫(kù)
phpCopy Code<?php
$servername = "localhost"; // 數(shù)據(jù)庫(kù)服務(wù)器地址
$username = "root"; // 數(shù)據(jù)庫(kù)用戶名
$password = ""; // 數(shù)據(jù)庫(kù)密碼
$dbname = "test"; // 數(shù)據(jù)庫(kù)名稱(chēng)
// 創(chuàng)建連接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 檢查連接
if (!$conn) {
die("連接失敗: " . mysqli_connect_error());
}
echo "連接成功";
?>
1.2 面向?qū)ο蠓绞竭B接數(shù)據(jù)庫(kù)
phpCopy Code<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
// 創(chuàng)建連接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢查連接
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
echo "連接成功";
?>

2. 使用 PDO(PHP Data Objects)擴(kuò)展
PDO 是一個(gè)更加靈活的數(shù)據(jù)庫(kù)連接方式,它支持多種數(shù)據(jù)庫(kù),不僅限于 MySQL。使用 PDO 時(shí),你可以通過(guò)配置不同的數(shù)據(jù)庫(kù)驅(qū)動(dòng)來(lái)支持多種類(lèi)型的數(shù)據(jù)庫(kù)。
2.1 使用 PDO 連接 MySQL
phpCopy Code<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
try {
// 創(chuàng)建 PDO 實(shí)例
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 設(shè)置 PDO 錯(cuò)誤模式
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "連接成功";
}
catch(PDOException $e) {
echo "連接失敗: " . $e->getMessage();
}
?>
2.2 PDO 連接時(shí)使用 prepare 和 execute
PDO 提供了更高效的預(yù)處理語(yǔ)句,適合處理用戶輸入,避免 SQL 注入攻擊。
phpCopy Code<?php
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 預(yù)處理查詢(xún)
$stmt = $conn->prepare("SELECT * FROM users WHERE id = :id");
$stmt->bindParam(':id', $id); // 綁定參數(shù)
$id = 1; // 傳入值
$stmt->execute();
// 獲取結(jié)果
$result = $stmt->fetchAll();
print_r($result);
}
catch(PDOException $e) {
echo "錯(cuò)誤: " . $e->getMessage();
}
?>
3. 使用 mysql_connect(已廢棄)
mysql_connect 是 PHP 的一個(gè)老舊擴(kuò)展,已被標(biāo)記為廢棄,不建議使用。它曾經(jīng)是連接 MySQL 數(shù)據(jù)庫(kù)的一種方式,但現(xiàn)在不再推薦使用。
phpCopy Code<?php
// 舊的方式(不推薦)
$conn = mysql_connect('localhost', 'root', '');
if (!$conn) {
die("連接失敗: " . mysql_error());
}
echo "連接成功";
?>
注意:mysql_connect 已經(jīng)被標(biāo)記為廢棄,且在 PHP 7.0.0 之后被完全移除,因此不推薦使用??梢允褂?mysqli 或 PDO 來(lái)替代。
4. 連接數(shù)據(jù)庫(kù)時(shí)的常見(jiàn)錯(cuò)誤和解決辦法
4.1 連接失敗的常見(jiàn)原因
用戶名和密碼錯(cuò)誤:確保提供正確的數(shù)據(jù)庫(kù)用戶名和密碼。
數(shù)據(jù)庫(kù)服務(wù)器不可達(dá):確保 MySQL 服務(wù)正在運(yùn)行,并且服務(wù)器地址正確。
數(shù)據(jù)庫(kù)名錯(cuò)誤:確保數(shù)據(jù)庫(kù)名稱(chēng)拼寫(xiě)正確,且數(shù)據(jù)庫(kù)存在。
4.2 錯(cuò)誤處理
為了捕獲和處理錯(cuò)誤,可以使用以下方式:
對(duì)于 mysqli,可以使用 mysqli_connect_error() 來(lái)捕獲連接錯(cuò)誤。
對(duì)于 PDO,可以使用 try...catch 塊來(lái)捕獲異常。
mysqli 和 PDO 都是 PHP 中常用的 MySQL 數(shù)據(jù)庫(kù)連接方法。mysqli 是 MySQL 的擴(kuò)展,而 PDO 是更通用的數(shù)據(jù)庫(kù)抽象層。
mysqli 提供了面向?qū)ο蠛瓦^(guò)程兩種方式,適合只連接 MySQL 數(shù)據(jù)庫(kù)的場(chǎng)景。
PDO 支持多種數(shù)據(jù)庫(kù),適合需要支持不同數(shù)據(jù)庫(kù)類(lèi)型的場(chǎng)景,且提供了更高效的查詢(xún)機(jī)制(如預(yù)處理語(yǔ)句)。
建議使用 mysqli 或 PDO 來(lái)連接數(shù)據(jù)庫(kù),而不再使用已經(jīng)廢棄的 mysql_connect。如果需要跨數(shù)據(jù)庫(kù)操作或更高級(jí)的功能(如事務(wù)處理、預(yù)處理語(yǔ)句等),PDO 是一個(gè)更好的選擇。