Php num_rows属性永远不可预测

Php num_rows属性永远不可预测,php,mysql,mysqli,Php,Mysql,Mysqli,我真的厌倦了这个num_rows属性。首先,我使用它时没有存储结果,它不起作用。然后我发现我应该将结果存储在本地,以便找出记录的数量。成功了。现在它又停止工作了 当我检查属性RequestedId时,它确实返回一个值。然而,num_rows表示零。我还缺什么 $query="select RequestedId from friend_request where RequestingId=?"; $stmt=$mysqli->stmt_init(); $stmt->pre

我真的厌倦了这个num_rows属性。首先,我使用它时没有存储结果,它不起作用。然后我发现我应该将结果存储在本地,以便找出记录的数量。成功了。现在它又停止工作了

当我检查属性RequestedId时,它确实返回一个值。然而,num_rows表示零。我还缺什么

  $query="select RequestedId from friend_request where RequestingId=?";
  $stmt=$mysqli->stmt_init();
  $stmt->prepare($query);
  $stmt->bind_param('i',$requestinguserid);
  $stmt->execute();
  $stmt->bind_result($RequestedId);
  $stmt->fetch();
  $stmt->store_result();
  if($stmt->num_rows > 0)
  {

    return $RequestedId;
 }
 else{
return 0;

}

从本页的解释来看:

在获取之前,需要调用store_result函数

$stmt->execute();

/* store result */
$stmt->store_result();

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

/* free result */
$stmt->free_result();

您应该能够在释放结果之前阅读这些结果。

从本页的解释来看:

在获取之前,需要调用store_result函数

$stmt->execute();

/* store result */
$stmt->store_result();

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

/* free result */
$stmt->free_result();

您应该能够在释放结果之前读取它们。

流程是,准备并执行语句,然后存储结果,然后检查行数,在大于零的条件下,绑定结果,然后获取,然后返回该列中获取的任何值:

$query = "select RequestedId from friend_request where RequestingId = ?";
$stmt = $mysqli->stmt_init();
$stmt->prepare($query);
$stmt->bind_param('i',$requestinguserid);
$stmt->execute(); // execute
$stmt->store_result(); // store result

if($stmt->num_rows > 0) // check number of rows
{
    $stmt->bind_result($RequestedId); // bind result
    $stmt->fetch(); // fetch
    return $RequestedId; // return
}
else
{
    return 0;
}
另一种选择是,如果您的环境中有mysqlnd驱动程序,您也可以使用这些相关的方法,并且使用相同的方法:

$query = "select RequestedId from friend_request where RequestingId=?";
$stmt = $mysqli->prepare($query); // prepared
$stmt->bind_param('i', $requestinguserid); // bind
$stmt->execute(); // execute
$results = $stmt->get_result(); // get result

if($results->num_rows > 0) { // check number of rows the from result
    $row = $results->fetch_row(); // fetch
    return $row[0]; // return
} else {
    return 0;
}
旁注:如果您想知道$results包含哪些内容,则应使用print\r显示以下内容:


num_rows属性就是从那里派生出来的。

流程是,准备并执行语句,然后存储结果,然后检查行数,在大于零的条件下,绑定结果,然后获取,然后返回该列中获取的任何值:

$query = "select RequestedId from friend_request where RequestingId = ?";
$stmt = $mysqli->stmt_init();
$stmt->prepare($query);
$stmt->bind_param('i',$requestinguserid);
$stmt->execute(); // execute
$stmt->store_result(); // store result

if($stmt->num_rows > 0) // check number of rows
{
    $stmt->bind_result($RequestedId); // bind result
    $stmt->fetch(); // fetch
    return $RequestedId; // return
}
else
{
    return 0;
}
另一种选择是,如果您的环境中有mysqlnd驱动程序,您也可以使用这些相关的方法,并且使用相同的方法:

$query = "select RequestedId from friend_request where RequestingId=?";
$stmt = $mysqli->prepare($query); // prepared
$stmt->bind_param('i', $requestinguserid); // bind
$stmt->execute(); // execute
$results = $stmt->get_result(); // get result

if($results->num_rows > 0) { // check number of rows the from result
    $row = $results->fetch_row(); // fetch
    return $row[0]; // return
} else {
    return 0;
}
旁注:如果您想知道$results包含哪些内容,则应使用print\r显示以下内容:


num_rows属性就是从那里派生出来的。

execute->store result->num rows->bind result->fetch->return,只需按照下面的答案执行->store result->num rows->bind result->fetch->return,只需按照下面的答案执行即可。。。我刚才编辑了代码。。我从来没有想过要把商店的结果放在卖场之上谢谢我刚才编辑了代码。。我从来没有想过要把商店的结果放在卖场之上谢谢鬼魂。。。第一个答案解决了我的问题,所以我接受了这个答案。。不过,你的解释也很好。@不管怎么说,弗洛斯库斯的第一个回答值得称赞,没问题,很高兴我们澄清了它。@Ghost谢谢,顺便说一句,这一个值得接受,因为我个人不使用mysqli,我的回答更多的是一个假设。@弗洛斯库斯谢谢你,伙计。。。我头晕目眩了一会儿。。至于又出了什么问题…谢谢你。。。第一个答案解决了我的问题,所以我接受了这个答案。。不过,你的解释也很好。@不管怎么说,弗洛斯库斯的第一个回答值得称赞,没问题,很高兴我们澄清了它。@Ghost谢谢,顺便说一句,这一个值得接受,因为我个人不使用mysqli,我的回答更多的是一个假设。@弗洛斯库斯谢谢你,伙计。。。我头晕目眩了一会儿。。至于又出了什么问题。。。