PHP警告:mysqli_num_row()要求参数1为mysqli_Result,给出了对象
我试图在SQL中使用LIKE关键字创建一些准备好的语句,但结果是:
警告 :mysqli_num_row()要求参数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>
相关文章