萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 函式:mysqli_affected_rows 取得受影響列數

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 不計入)
?>

搭配 Prepared Statements

$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。
copyright © 萬盛學電腦網 all rights reserved