PHP Conference Japan 2024

mysqli_stmt::$affected_rows

mysqli_stmt_affected_rows

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::$affected_rows -- mysqli_stmt_affected_rows傳回最後執行的語句所變更、刪除、插入或比對的總列數

描述

物件導向樣式

程序樣式

mysqli_stmt_affected_rows(mysqli_stmt $statement): int|string

傳回受 INSERTUPDATEDELETE 查詢影響的列數。對於 SELECT 語句,其作用類似於 mysqli_stmt_num_rows()

參數

statement

僅限程序樣式:由 mysqli_stmt_init() 傳回的 mysqli_stmt 物件。

傳回值

大於零的整數表示受影響或擷取的列數。零表示 UPDATE 語句沒有更新任何記錄,查詢中沒有任何列符合 WHERE 子句,或者尚未執行任何查詢。-1 表示查詢傳回錯誤,或者對於 SELECT 查詢,在呼叫 mysqli_stmt_store_result() 之前呼叫了 mysqli_stmt_affected_rows()

注意:

如果受影響的列數大於 PHP int 的最大值,則受影響的列數將以字串值傳回。

範例

範例 #1 mysqli_stmt_affected_rows() 範例

物件導向樣式

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* 建立暫存表格 */
$mysqli->query("CREATE TEMPORARY TABLE myCountry LIKE Country");

$query = "INSERT INTO myCountry SELECT * FROM Country WHERE Code LIKE ?";

/* 準備語句 */
$stmt = $mysqli->prepare($query);

/* 為佔位符綁定變數 */
$code = 'A%';
$stmt->bind_param("s", $code);

/* 執行語句 */
$stmt->execute();

printf("插入的列數:%d\n", $stmt->affected_rows);

程序樣式

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* 建立暫存表格 */
mysqli_query($link, "CREATE TEMPORARY TABLE myCountry LIKE Country");

$query = "INSERT INTO myCountry SELECT * FROM Country WHERE Code LIKE ?";

/* 準備語句 */
$stmt = mysqli_prepare($link, $query);

/* 為佔位符綁定變數 */
$code = 'A%';
mysqli_stmt_bind_param($stmt, "s", $code);

/* 執行語句 */
mysqli_stmt_execute($stmt);

printf("插入的列數:%d\n", mysqli_stmt_affected_rows($stmt));

以上範例將輸出

Rows inserted: 17

參見

新增註解

使用者貢獻註解 1 個註解

30
Carl Olsen
18 年前
看起來,如果 UPDATE 預備語句包含與資料庫中已存在的相同資料,則 affected_rows 會傳回 0。我原先預期它會傳回 1,但它一定是將輸入值與現有值進行比較,並確定沒有發生 UPDATE。
To Top