在PHP 中與數據庫進行交互是構建動態網頁和應用程序的重要環節。 connect()並不是PHP 官方內置的標準函數,而是一個常見的自定義函數名,開發者常用它來封裝數據庫連接邏輯。通過創建自己的connect()函數,我們可以提升代碼的可複用性和可維護性。
雖然PHP 提供瞭如mysqli_connect()或PDO 的方式進行數據庫連接,但重複書寫連接邏輯會使代碼臃腫。通過封裝,可以:
統一數據庫連接方式
簡化主邏輯中的代碼
更容易進行錯誤處理和調試
實現連接配置的集中管理
以下是一個使用mysqli擴展的connect()函數示例:
<code> ```php <?php function connect() {
$host = 'localhost';
$user = 'db_user';
$password = 'db_password';
$database = 'my_database';
$conn = new mysqli($host, $user, $password, $database);
if ($conn->connect_error) {
die('數據庫連接失敗: ' . $conn->connect_error);
}
// 設置字符集
$conn->set_charset('utf8mb4');
return $conn;
}
// 使用示例
$conn = connect();
$result = $conn->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
echo "用戶名: " . $row['username'] . "<br>";
}
$conn->close();
?>
</code>
## 示例:使用 PDO 實現的 connect() 函數
相比 `mysqli`,PDO 支持多種數據庫系統且安全性更高。以下是使用 PDO 的版本:
<code>
```php
<?php
function connect() {
$dsn = 'mysql:host=localhost;dbname=my_database;charset=utf8mb4';
$username = 'db_user';
$password = 'db_password';
try {
$pdo = new PDO($dsn, $username, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
return $pdo;
} catch (PDOException $e) {
die('數據庫連接失敗: ' . $e->getMessage());
}
}
// 使用示例
$pdo = connect();
$stmt = $pdo->query("SELECT * FROM users");
foreach ($stmt as $row) {
echo "使用者名稱: " . $row['username'] . "<br>";
}
?>
</code>使用配置文件:將數據庫配置提取到.ini或.env文件中,更利於管理和環境切換。
添加日誌記錄:連接失敗時寫入日誌,而不僅僅是die() 。
使用單例模式:在大型應用中防止重複連接數據庫。
錯誤訊息 | 原因 | 解決方法 |
---|---|---|
Access denied for user | 用戶名或密碼錯誤 | 檢查用戶憑據是否正確 |
Unknown database | 數據庫不存在 | 確保數據庫已經創建 |
Connection timed out | 網絡或權限問題 | 檢查主機名是否正確以及是否開放端口 |
雖然connect()並不是PHP 的標準函數,但它是一個常見的封裝方式,便於開發者統一管理數據庫連接。無論你使用的是mysqli還是PDO,實現一個穩定、可複用的connect()函數是高質量PHP 應用的基礎。