当我以数组形式获取结果时,我在获取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;