PDOStatement 由 PDO::prepare() 回傳,代表一個預處理語句物件,支援參數綁定、執行、結果集獲取等完整資料庫操作流程。
| 方法 | 說明 |
|---|---|
bindParam() | 綁定參數變數(參考綁定) |
bindValue() | 綁定參數值(值綁定) |
bindColumn() | 綁定結果欄位至變數 |
execute() | 執行預處理語句 |
fetch() | 取得下一行 |
fetchAll() | 取得所有行陣列 |
fetchColumn() | 取得單一欄位值 |
rowCount() | 影響行數 |
setFetchMode() | 設定預設取得模式 |
<?php
// 命名參數(推薦,可讀性高)
$stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (:name, :email)');
// 問號參數(須注意順序)
$stmt = $pdo->prepare('INSERT INTO users (name, email) VALUES (?, ?)');
<?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);
<?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);
}
<?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();
}
<?php
$stmt->execute(['name' => 'New']);
$lastId = $pdo->lastInsertId(); // 最後插入 ID
$affected = $stmt->rowCount(); // 影響行數