如何解决PHP警告:mysqli_num_rows期望参数1为mysqli_result,给定对象
我正在尝试使用sql中的LIKE关键字编写一些准备好的语句,但这给了我:
警告 :mysqli_num_rows()期望参数1为mysqli_result,指定对象
PHP代码:
if(isset($_POST['search_acc'])){
$p = $_POST['search_text'];
$search_text = "%p%";
$stmt = $conn->prepare("SELECT * FROM accountants WHERE name LIKE ? ");
$stmt->bind_param("s",$search_text);
$stmt->execute();
}
if (mysqli_num_rows($stmt) > 0) {
while ($RowaccountantsList = mysqli_fetch_assoc($stmt)) {
$accountantFullName = mysqli_real_escape_string($conn,$RowaccountantsList['name']);
$accountantId = mysqli_real_escape_string($conn,$RowaccountantsList['ts_number']);
$accountantCityTown = mysqli_real_escape_string($conn,$RowaccountantsList['city_town']);
$DB_id = mysqli_real_escape_string($conn,$RowaccountantsList['id']);
$nrc = mysqli_real_escape_string($conn,$RowaccountantsList['nrc']);
$profile_pic = mysqli_real_escape_string($conn,$RowaccountantsList['profile_pic']);
$RegisteredDate = mysqli_real_escape_string($conn,$RowaccountantsList['registered_date']);
}
html搜索表单:
<form method="post" action="">
<div id="custom-search-input">
<div class="input-group col-md-12 align-center">
<input name="search_text" type="text" class="form-control input-lg" placeholder="Enter email,phone or username" />
<span class="input-group-btn">
<button name="search_acc" class="btn btn-info btn-lg" type="submit">
<i class="fa fa-search" aria-hidden="true"></i>
</button>
</span>
</div>
</div>
</div>
</form>
解决方法
问题:
方法mysqli::prepare返回mysqli_stmt类的实例,例如 准备好的声明 对象。但是过程函数mysqli_num_rows需要类型mysqli_result的对象作为参数,例如 结果集 对象。
解决方案:
因此,为了能够正确调用函数mysqli_num_rows
,您首先必须从获取 结果集 通过调用方法$stmt::get_result
准备好的声明 。然后可以将结果集对象($result
作为参数传递给mysqli_num_rows
:
<?php
if (isset($_POST['search_acc'])) {
//...
$stmt->execute();
/*
* Get the result set from the prepared statement.
*
* NOTA BENE:
* Available only with mysqlnd ("MySQL Native Driver")! If this
* is not installed,then uncomment "extension=php_mysqli_mysqlnd.dll" in
* PHP config file (php.ini) and restart web server (I assume Apache) and
* mysql service. Or use the following functions instead:
* mysqli_stmt::store_result + mysqli_stmt::bind_result + mysqli_stmt::fetch.
*
* @link http://php.net/manual/en/mysqli-stmt.get-result.php
* @link https://stackoverflow.com/questions/8321096/call-to-undefined-method-mysqli-stmtget-result
*/
$result = $stmt->get_result();
if (mysqli_num_rows($result) > 0) {
while ($RowaccountantsList = mysqli_fetch_assoc($stmt)) {
// No need for "mysqli_real_escape_string" anymore,since the SQL statement is prepared using mysqli::prepare.
$accountantFullName = $RowaccountantsList['name'];
//...
}
}
}
替代解决方案:
<?php
if (isset($_POST['search_acc'])) {
//...
$stmt->execute();
$result = $stmt->get_result();
/*
* Fetch all data at once and save it into an array.
*
* @link http://php.net/manual/en/mysqli-result.fetch-all.php
*/
$accountants = $result->fetch_all(MYSQLI_ASSOC);
/*
* ...or fetch and save one row at a time.
*
* @link https://secure.php.net/manual/en/mysqli-result.fetch-array.php
*/
// while ($accountant = $result->fetch_array(MYSQLI_ASSOC)) {
// $accountants[] = $accountant;
// }
}
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=yes" />
<meta charset="UTF-8" />
<!-- The above 3 meta tags must come first in the head -->
<title>Demo</title>
</head>
<body>
<form method="post" action="">
<div id="custom-search-input">
<div class="input-group col-md-12 align-center">
<input name="search_text" type="text" class="form-control input-lg" placeholder="Enter email,phone or username" />
<span class="input-group-btn">
<button name="search_acc" class="btn btn-info btn-lg" type="submit">
<i class="fa fa-search" aria-hidden="true"></i>
</button>
</span>
</div>
</div>
</form>
<h3>
Accountants list
</h3>
<table class="accountants">
<thead>
<tr>
<th>ID</th>
<th>Full Name</th>
<th>City/Town</th>
<th>TS Number</th>
<th>NRC</th>
<th>Profile Picture</th>
<th>Registered Date</th>
</tr>
</thead>
<tbody>
<?php
if ($accountants) {
foreach ($accountants as $accountant) {
$id = $accountant['id'];
$fullName = $accountant['name'];
$cityTown = $accountant['city_town'];
$tsNumber = $accountant['ts_number'];
$nrc = $accountant['nrc'];
$profilePicture = $accountant['profile_pic'];
$registeredDate = $accountant['registered_date'];
?>
<tr class="accountant">
<td><?php echo $id; ?></td>
<td><?php echo $fullName; ?></td>
<td><?php echo $cityTown; ?></td>
<td><?php echo $tsNumber; ?></td>
<td><?php echo $nrc; ?></td>
<td><?php echo $profilePicture; ?></td>
<td><?php echo $registeredDate; ?></td>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="7">
No accountants found.
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</body>
</html>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。