在PHP中,連接 MySQL 數(shù)據(jù)庫有幾種常用的方式。以下是幾種常見的連接 MySQL 數(shù)據(jù)庫的方法。
1. 使用 mysqli(MySQL Improved)擴展
mysqli 是 PHP 中用于操作 MySQL 數(shù)據(jù)庫的擴展,它支持面向?qū)ο蠛兔嫦蜻^程的方式。這里介紹兩種常見的連接方式:面向過程和面向?qū)ο蟆?/p>
1.1 面向過程方式連接數(shù)據(jù)庫
phpCopy Code<?php
$servername = "localhost"; // 數(shù)據(jù)庫服務(wù)器地址
$username = "root"; // 數(shù)據(jù)庫用戶名
$password = ""; // 數(shù)據(jù)庫密碼
$dbname = "test"; // 數(shù)據(jù)庫名稱
// 創(chuàng)建連接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 檢查連接
if (!$conn) {
die("連接失敗: " . mysqli_connect_error());
}
echo "連接成功";
?>
1.2 面向?qū)ο蠓绞竭B接數(shù)據(jù)庫
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)擴展
PDO 是一個更加靈活的數(shù)據(jù)庫連接方式,它支持多種數(shù)據(jù)庫,不僅限于 MySQL。使用 PDO 時,你可以通過配置不同的數(shù)據(jù)庫驅(qū)動來支持多種類型的數(shù)據(jù)庫。
2.1 使用 PDO 連接 MySQL
phpCopy Code<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";
try {
// 創(chuàng)建 PDO 實例
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 設(shè)置 PDO 錯誤模式
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "連接成功";
}
catch(PDOException $e) {
echo "連接失敗: " . $e->getMessage();
}
?>
2.2 PDO 連接時使用 prepare 和 execute
PDO 提供了更高效的預(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ù)處理查詢
$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 "錯誤: " . $e->getMessage();
}
?>
3. 使用 mysql_connect(已廢棄)
mysql_connect 是 PHP 的一個老舊擴展,已被標(biāo)記為廢棄,不建議使用。它曾經(jīng)是連接 MySQL 數(shù)據(jù)庫的一種方式,但現(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 來替代。
4. 連接數(shù)據(jù)庫時的常見錯誤和解決辦法
4.1 連接失敗的常見原因
用戶名和密碼錯誤:確保提供正確的數(shù)據(jù)庫用戶名和密碼。
數(shù)據(jù)庫服務(wù)器不可達(dá):確保 MySQL 服務(wù)正在運行,并且服務(wù)器地址正確。
數(shù)據(jù)庫名錯誤:確保數(shù)據(jù)庫名稱拼寫正確,且數(shù)據(jù)庫存在。
4.2 錯誤處理
為了捕獲和處理錯誤,可以使用以下方式:
對于 mysqli,可以使用 mysqli_connect_error() 來捕獲連接錯誤。
對于 PDO,可以使用 try...catch 塊來捕獲異常。
mysqli 和 PDO 都是 PHP 中常用的 MySQL 數(shù)據(jù)庫連接方法。mysqli 是 MySQL 的擴展,而 PDO 是更通用的數(shù)據(jù)庫抽象層。
mysqli 提供了面向?qū)ο蠛瓦^程兩種方式,適合只連接 MySQL 數(shù)據(jù)庫的場景。
PDO 支持多種數(shù)據(jù)庫,適合需要支持不同數(shù)據(jù)庫類型的場景,且提供了更高效的查詢機制(如預(yù)處理語句)。
建議使用 mysqli 或 PDO 來連接數(shù)據(jù)庫,而不再使用已經(jīng)廢棄的 mysql_connect。如果需要跨數(shù)據(jù)庫操作或更高級的功能(如事務(wù)處理、預(yù)處理語句等),PDO 是一個更好的選擇。