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

PDO 預處理語句與 PDOStatement 完整操作指南

     編輯:PHP 相關知識

PDOStatement 物件方法詳解與最佳實務

PDOStatement 由 PDO::prepare() 回傳,代表一個預處理語句物件,支援參數綁定、執行、結果集獲取等完整資料庫操作流程。

PDOStatement 主要方法速查

方法說明
bindParam()綁定參數變數(參考綁定)
bindValue()綁定參數值(值綁定)
bindColumn()綁定結果欄位至變數
execute()執行預處理語句
fetch()取得下一行
fetchAll()取得所有行陣列
fetchColumn()取得單一欄位值
rowCount()影響行數
setFetchMode()設定預設取得模式

1. 準備語句:命名參數 vs 問號參數

<?php
// 命名參數(推薦,可讀性高)
$stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');

// 問號參數(須注意順序)
$stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (?, ?)');

2. 綁定參數

<?php
// bindParam:變數參考,執行時取值
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$stmt->bindParam(':email', $email, PDO::PARAM_STR);

// bindValue:直接綁定值,可用常數
$stmt->bindValue(':status', 1, PDO::PARAM_INT);
$stmt->bindValue(':role', 'admin', PDO::PARAM_STR);

3. 執行與批次處理

<?php
// 方式一:先綁定再執行
$name = 'Alice'; $email = 'alice@example.com';
$stmt->execute();

// 方式二:execute 直接傳陣列(僅限值綁定)
$stmt->execute(['name' => 'Bob', 'email' => 'bob@example.com']);

// 批次新增
$data = [
    ['name' => 'C', 'email' => 'c@test.com'],
    ['name' => 'D', 'email' => 'd@test.com'],
];
foreach ($data as $row) {
    $stmt->execute($row);
}

4. 取得結果

<?php
$stmt = $pdo->query('SELECT * FROM users');

// 逐行處理(記憶體友善)
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['name'];
}

// 一次取得所有
$all = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 只取單一欄位
$emails = $stmt->fetchAll(PDO::FETCH_COLUMN, 1); // 第 2 欄

// 取得物件
$stmt->setFetchMode(PDO::FETCH_CLASS, 'UserEntity');
while ($user = $stmt->fetch()) {
    $user->sendWelcomeEmail();
}

5. 取得自增 ID 與影響行數

<?php
$stmt->execute(['name' => 'New']);
$lastId = $pdo->lastInsertId(); // 最後插入 ID
$affected = $stmt->rowCount();  // 影響行數

關鍵優勢

  • SQL 注入防護:參數化查詢徹底分離程式碼與資料。
  • 效能提升:重複執行同一 SQL 只需解析優化一次。
  • 資料庫抽象:同一套程式碼支援 MySQL、PostgreSQL、SQLite 等。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved