mysqli_affected_rows() 回傳前一條 INSERT、UPDATE、DELETE、REPLACE 陳述式影響的資料列數。
// 物件風格
$count = $mysqli->affected_rows;
// 程序風格
$count = mysqli_affected_rows($link);
>= 0:影響的列數。-1:查詢錯誤或最後操作非寫入類型 (如 SELECT)。<?php
$mysqli = new mysqli('localhost', 'user', 'pwd', 'db');
$mysqli->query("UPDATE users SET status=1 WHERE id=5");
echo "更新筆數: " . $mysqli->affected_rows; // 1 (若 id=5 存在)
$mysqli->query("DELETE FROM logs WHERE created_at < '2023-01-01'");
echo "刪除筆數: " . $mysqli->affected_rows; // 可能 > 0
$mysqli->query("SELECT * FROM users");
echo "查詢影響: " . $mysqli->affected_rows; // -1 (SELECT 不計入)
?>
$stmt = $mysqli->prepare("UPDATE products SET stock = stock - 1 WHERE id = ? AND stock > 0");
$stmt->bind_param('i', $id);
$stmt->execute();
if ($stmt->affected_rows === 1) {
echo '扣減庫存成功';
} else {
echo '庫存不足或商品不存在';
}
REPLACE INTO 視為 DELETE + INSERT,affected_rows 可能為 2。INSERT ... ON DUPLICATE KEY UPDATE:新增回傳 1,更新回傳 2。