【发布时间】:2014-02-08 02:23:07
【问题描述】:
我在使用prepared statement,想统计查询结果集的行数:
/* 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_num_rows($r) == 1) 是错误的:mysqli_num_rows() expects parameter 1 to be mysqli_result, object given.
我查了手册:
程序风格 int mysqli_num_rows (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准备好的语句(过程式),那么如何计算结果集的行数??
【问题讨论】: