在fetch_array后获取num_rows的正确命令顺序(mysqli OOP)



当我以数组形式获取结果时,我在获取num_row时遇到问题:

$sql = "SELECT * FROM people WHERE peopleid=?";
if (!($stmt = $mysqli->prepare($sql))) {
echo "stmt Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
if (!$stmt->bind_param("i", $_GET['peopleid'])) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
if (!$stmt->execute()) {
   echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
$stmt->store_result();
$exist=$stmt->num_rows;
$result = $stmt->get_result();
$peopleres  = $result->fetch_array(MYSQLI_ASSOC); // this does work :)
if ($exist == 0) {
//do something it it's zero
}

如果我将store_results和num_rows放在示例中的位置,我会得到一个

在非对象错误时调用成员函数 fetch_array()。

如果我把它放在fetch_array之后,它总是等于零。我以前曾成功地使用过num_rows,但这是我第一次尝试与fetch_array一起使用它。

查看文档

mysqli_result::$num_row
int $mysqli_result->num_rows;

如果出于某种原因想要使用 num_rows 而不是

$stmt->store_result();
$exist=$stmt->num_rows;
$result = $stmt->get_result();
$peopleres  = $result->fetch_array(MYSQLI_ASSOC); // this does work :)
if ($exist == 0) {
//do something it it's zero
}

你可以试试

$result = $stmt->get_result();
$exist = $result->num_rows;
if ($exist == 0) {
    //do something it it's zero
}
$row = $result->fetch_array(MYSQLI_ASSOC);

现在,如果您只是检查结果集中是否有任何行,则使用 num_rows 并不是绝对必要的,因为您已经在客户端上获得了结果集。您可以尝试获取一行

$result = $stmt->get_result();
if (!$row = $result->fetch_array(MYSQLI_ASSOC)) {
    //do something if there's no row
} else {
    //do what you have to do with you data in the row
    echo 'peopleid: ' . $row['peopleid'];
}
<</div> div class="one_answers">

行数是有史以来最无用的函数。
而且你也不需要它。只需获取您的数据并使用它而不是$exists标志:

if(!$peopleres) ...

您还可以使用 :

$exist = $stmt->affected_rows;

删除:

$stmt->store_result();
$exist=$stmt->num_rows;
$result = $stmt->get_result();

加: $result = $stmt->get_result(); $exist = $stmt->affected_rows;

最新更新