首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP PDO 完整詳解:三大核心類、事務處理、錯誤模式與預處理語句

     編輯:PHP 相關知識

PHP PDO 完整詳解:三大核心類、事務處理、錯誤模式與預處理語句

PDO (PHP Data Objects) 提供統一的資料庫存取介面,支援多種資料庫驅動,是現代 PHP 專案首選資料庫抽象層。

三大預定義類別

  • PDO:資料庫連線物件。
  • PDOStatement:預處理語句與結果集物件。
  • PDOException:異常物件。

1. 資料庫連線與持久連線

$dsn = 'mysql:dbname=test;host=127.0.0.1;charset=utf8';
$opt = [
    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, 'user', 'pass', $opt);

2. 事務處理

try {
    $pdo->beginTransaction();
    $pdo->exec("INSERT INTO users (name) VALUES ('Alice')");
    $pdo->exec("INSERT INTO users (name) VALUES ('Bob')");
    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollBack();
    echo "Failed: " . $e->getMessage();
}

若腳本異常結束未提交,PDO 自動回滾,保障資料一致性。

3. 錯誤處理三種模式

模式常數行為適用場景
PDO::ERRMODE_SILENT僅設定錯誤碼,需手動檢查 errorCode()/errorInfo()舊代碼相容
PDO::ERRMODE_WARNING觸發 E_WARNING,不中斷執行除錯階段
PDO::ERRMODE_EXCEPTION拋出 PDOException,中斷流程生產環境推薦

設定方式:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

4. 預處理語句與參數綁定

$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email AND status = :status");
$stmt->bindValue(':email', $email, PDO::PARAM_STR);
$stmt->bindValue(':status', 1, PDO::PARAM_INT);
$stmt->execute();
$user = $stmt->fetch(); // PDO::FETCH_ASSOC

防止 SQL 注入、提升重複執行效能。

5. 常用屬性常數速查

  • 參數型別:PARAM_STR, PARAM_INT, PARAM_BOOL, PARAM_NULL, PARAM_LOB, PARAM_INPUT_OUTPUT
  • 抓取模式:FETCH_ASSOC, FETCH_NUM, FETCH_BOTH, FETCH_OBJ, FETCH_CLASS, FETCH_LAZY, FETCH_KEY_PAIR
  • 游標:CURSOR_FWDONLY (預設), CURSOR_SCROLL

6. 進階技巧

  • lastInsertId() 取得自增 ID。
  • rowCount() 僅對 DELETE/UPDATE/INSERT 有效,SELECT 不可靠。
  • 大量資料用 fetchAll() 一次取回,或迴圈 fetch() 節省記憶體。
  • 異常模式下事務自動回滾,簡化錯誤處理邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved