PHP Conference Japan 2024

mysqli_stmt::$num_rows

mysqli_stmt::num_rows

mysqli_stmt_num_rows

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::$num_rows -- mysqli_stmt::num_rows -- mysqli_stmt_num_rows返回從伺服器擷取的資料列數

說明

物件導向風格

public mysqli_stmt::num_rows(): int|string

程序風格

mysqli_stmt_num_rows(mysqli_stmt $statement): int|string

返回敘述中緩衝的列數。此函式僅在呼叫 mysqli_stmt_store_result() 將整個結果集緩衝到敘述句柄後才有效。

除非已從伺服器擷取所有列,否則此函式會返回 0

參數

statement

僅限程序風格:由 mysqli_stmt_init() 返回的 mysqli_stmt 物件。

返回值

表示緩衝列數的 int。在非緩衝模式下,除非已從伺服器擷取所有列,否則返回 0

注意事項:

如果列數大於 PHP_INT_MAX,則列數將以 string 類型返回。

範例

範例 #1 物件導向風格

<?php

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

$query = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20";
$stmt = $mysqli->prepare($query);
$stmt->execute();

/* 將結果儲存到內部緩衝區 */
$stmt->store_result();

printf("列數:%d。\n", $stmt->num_rows);

範例 #2 程序風格

<?php

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

$query = "SELECT Name, CountryCode FROM City ORDER BY Name LIMIT 20";
$stmt = mysqli_prepare($link, $query);
mysqli_stmt_execute($stmt);

/* 將結果儲存到內部緩衝區 */
mysqli_stmt_store_result($stmt);

printf("Number of rows: %d.\n", mysqli_stmt_num_rows($stmt));

上述範例將輸出

Number of rows: 20.

另請參閱

新增備註

使用者提供的備註 1 則備註

89
Typer85 at gmail dot com
17 年前
請注意,對於有時會錯過閱讀此函數的重要手冊條目的人

如果您沒有使用 mysqli_stmt_store_result( ),並且在執行準備好的語句後立即呼叫此函數,則此函數通常會返回 0,因為它無法知道結果集中有多少列,因為結果集尚未儲存在記憶體中。

mysqli_stmt_store_result( ) 將結果集儲存在記憶體中,因此您可以在執行語句並儲存結果集後立即使用此函數。

如果您沒有儲存結果集,但仍然想使用此函數,則必須在使用此函數確定列數之前,使用 mysqli_stmt_fetch( ) 實際逐列迴圈處理結果集。

不過,如果您想在不儲存結果集的情況下,並且在迴圈處理之後確定列數,為什麼不在每次擷取列時在迴圈中保留一個內部計數器,並儲存函數呼叫呢?

簡而言之,如果您儲存結果集並想在迴圈處理之前確定列數,則此函數才真正有用,否則您可以像我建議的那樣重新建立其用途。
To Top