PHP-mysqli_num_行在mysqli_stmt_执行后不能使用?

PHP-mysqli_num_行在mysqli_stmt_执行后不能使用?,php,mysqli,Php,Mysqli,我正在使用prepared语句,并希望计算查询结果集的行号: /* create a prepared statement */ // Note: mysqli can only use placeholder ? in prepared statement! $q = "SELECT user_id, first_name, DATE_FORMAT(last_login_time, '%a, %b %e at %l:%i%p') as f_l

我正在使用prepared语句,并希望计算查询结果集的行号:

        /* create a prepared statement */  
        // Note: mysqli can only use placeholder ? in prepared statement!
        $q = "SELECT user_id, first_name, DATE_FORMAT(last_login_time, '%a, %b %e at %l:%i%p') as f_last_login_time, last_login_time FROM users WHERE (email=? AND pass=SHA1(?)) AND active IS NULL";                
        $stmt = mysqli_prepare($dbc, $q);  

        /* bind parameters for markers */
        mysqli_stmt_bind_param($stmt, "ss", $e, $p);

        /* execute query */
       $r =  mysqli_stmt_execute($stmt);


       if (mysqli_num_rows($r) == 1) { // A match was made in the user table

                /* bind result variables */
                mysqli_stmt_bind_result($stmt, $user_id, $first_name, $f_last_login_time, $last_login_time);

                /* fetch value */
                // Fetch the result from a prepared statement into the variables bound by mysqli_stmt_bind_result(). 
                mysqli_stmt_fetch($stmt); 
这里的
if(mysqli\u num\u rows($r)==1)
是错误的:
mysqli\u num\u rows()期望参数1是给定对象的mysqli\u结果。

我查看了手册:

程序样式int mysqli_num_行(mysqli_result$result)

返回结果集中的行数

mysqli_num_rows()的行为取决于是缓冲还是缓冲 正在使用未缓冲的结果集。对于未缓冲的结果集, mysqli_num_rows()将不会返回正确的行数,直到所有 已检索到结果中的行。参数»

结果

Procedural style only: A result set identifier returned by mysqli_query(), mysqli_store_result() or mysqli_use_result().

那么,如果我使用Mysqli prepared语句(过程式),如何计算结果集的行号呢?

Mysqli\u stmt\u execute
返回一个布尔值,指示查询是否成功,而不返回
Mysqli\u结果。您需要调用
mysqli\u stmt\u get\u result

$r = mysqli_stmt_execute($stmt);
if ($r) {
    $result = mysqli_stmt_get_result($stmt);
    if (mysqli_num_rows($result) == 1) {
        ...
    }
}
您还可以简单地测试mysqli\u stmt\u fetch的结果。它返回一个布尔值,指示是否提取了行

$r = mysqli_stmt_execute($stmt);
if (mysqli_stmt_fetch($stmt)) {
    ...
}

mysqli\u stmt\u execute
返回一个指示查询是否成功的布尔值,但不返回
mysqli\u结果。您需要调用
mysqli\u stmt\u get\u result

$r = mysqli_stmt_execute($stmt);
if ($r) {
    $result = mysqli_stmt_get_result($stmt);
    if (mysqli_num_rows($result) == 1) {
        ...
    }
}
您还可以简单地测试mysqli\u stmt\u fetch的结果。它返回一个布尔值,指示是否提取了行

$r = mysqli_stmt_execute($stmt);
if (mysqli_stmt_fetch($stmt)) {
    ...
}

为什么要为结果集而烦恼呢?为什么不简单地使用
mysqli\u stmt\u fetch
来获取值呢?为什么还要麻烦处理结果集呢?为什么不直接使用
mysqli\u stmt\u fetch
获取值呢?