PHP-mysqli_num_行在mysqli_stmt_执行后不能使用?
我正在使用prepared语句,并希望计算查询结果集的行号: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
/* 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
获取值呢?