# PHP怎么使用PDO連接數據庫
## 一、PDO簡介
PDO(PHP Data Objects)是PHP中一個輕量級的數據庫訪問抽象層,它為訪問不同數據庫提供了統一的接口。使用PDO的主要優勢包括:
1. **數據庫無關性**:通過更換DSN即可切換不同數據庫
2. **預處理語句**:內置防止SQL注入的機制
3. **錯誤處理**:支持多種錯誤處理模式
4. **面向對象**:完全面向對象的API設計
5. **性能優化**:比傳統mysql_*函數更高效
## 二、PDO基本連接方法
### 2.1 連接MySQL數據庫
```php
<?php
$host = 'localhost';
$dbname = 'test_db';
$username = 'root';
$password = 'password';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
echo "連接成功";
} catch (PDOException $e) {
die("連接失敗: " . $e->getMessage());
}
?>
驅動名:host=主機名;dbname=數據庫名
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 錯誤處理模式
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 默認獲取模式
PDO::ATTR_EMULATE_PREPARES => false, // 禁用預處理模擬
PDO::ATTR_PERSISTENT => true // 持久連接
];
$pdo = new PDO($dsn, $username, $password, $options);
$stmt = $pdo->query('SELECT * FROM users');
while ($row = $stmt->fetch()) {
print_r($row);
}
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute([':id' => $userId]);
$user = $stmt->fetch();
$data = [
'name' => '張三',
'email' => 'zhangsan@example.com',
'age' => 25
];
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$stmt->execute($data);
PDO支持數據庫事務,確保數據一致性:
try {
$pdo->beginTransaction();
// 執行多個SQL操作
$pdo->exec("UPDATE accounts SET balance = balance - 100 WHERE user_id = 1");
$pdo->exec("UPDATE accounts SET balance = balance + 100 WHERE user_id = 2");
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
echo "事務失敗: " . $e->getMessage();
}
PDO提供三種錯誤處理模式:
設置異常模式:
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
獲取錯誤信息:
$stmt = $pdo->prepare('SELECT * FROM non_existent_table');
try {
$stmt->execute();
} catch (PDOException $e) {
echo "錯誤代碼: " . $e->getCode() . "<br>";
echo "錯誤信息: " . $e->getMessage();
}
$pdo = new PDO('sqlite:/path/to/database.sqlite');
$pdo = new PDO('pgsql:host=localhost;dbname=testdb', 'username', 'password');
$pdo = new PDO('oci:dbname=//localhost:1521/mydb', 'username', 'password');
$pdo->lastInsertId();
$data = [
['name' => '李四', 'email' => 'lisi@example.com'],
['name' => '王五', 'email' => 'wangwu@example.com']
];
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
foreach ($data as $row) {
$stmt->execute([$row['name'], $row['email']]);
}
$stmt = $pdo->prepare("CALL sp_get_user(?)");
$stmt->execute([$userId]);
$result = $stmt->fetchAll();
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false)
<?php
// 數據庫配置
$config = [
'host' => 'localhost',
'dbname' => 'company',
'username' => 'app_user',
'password' => 'secure_password',
'options' => [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]
];
// 連接數據庫
try {
$dsn = "mysql:host={$config['host']};dbname={$config['dbname']};charset=utf8";
$pdo = new PDO($dsn, $config['username'], $config['password'], $config['options']);
// 查詢示例
$stmt = $pdo->prepare("SELECT * FROM employees WHERE department = ? AND salary > ?");
$stmt->execute(['IT', 5000]);
$employees = $stmt->fetchAll();
// 輸出結果
foreach ($employees as $emp) {
echo "姓名: {$emp['name']}, 職位: {$emp['position']}<br>";
}
} catch (PDOException $e) {
die("數據庫錯誤: " . $e->getMessage());
}
?>
PDO作為PHP官方推薦的數據庫訪問方式,提供了安全、高效且統一的數據庫操作接口。通過本文的介紹,您應該已經掌握了PDO的基本使用方法。在實際開發中,建議結合ORM框架或查詢構建器使用PDO,可以進一步提高開發效率和代碼可維護性。
記住,良好的數據庫操作習慣是Web應用安全的基礎,始終遵循安全最佳實踐,才能構建出健壯的應用程序。 “`
這篇文章共計約2150字,全面介紹了PDO連接數據庫的各個方面,包括基本連接、查詢執行、事務處理、錯誤處理、連接不同數據庫以及安全注意事項等內容。采用Markdown格式編寫,結構清晰,包含代碼示例和實用建議。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。