Click here to Skip to main content
15,886,806 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in C:\laragon\www\studentfee\015proc_search2.php on line 25

What I have tried:

PHP
<?php

$searchtype=$_POST['searchtype'];
$searchterm=$_POST['searchterm'];
$searchterm= trim($searchterm);

if (!$searchtype || !$searchterm)
{
	echo ' Please Enter your search. Please enter again.';
	exit;
}

include ('001link_db2.php');
$query = "select * from v_student_fee LIKE '%$searchterm'";
$result = mysqli_query($conn,$query);
$num_results = mysqli_num_rows($result);
echo "<center>";
echo '<p>The numbers: '.$num_results.'</p>';

?>
<P><center> List</center>  
<table border="1" width="849" align="center" cellspacing="2" cellpadding="2">
<tr>
<td align="center" bgcolor="#FFCC00">ID</td>
<td align="center" bgcolor="#FFCC00">Student Name</td>
<td align="center" bgcolor="#FFCC00">Total Fees</td>


</tr>
<?PHP

for ($i=0; $i <$num_results; $i++)
{
 $row = mysqli_fetch_all($result);
 echo "<tr>";
 echo "<td>" .$row["id"]. "</td>";
 echo "<td>" .$row["student_name"].  "</td>";
 echo "<td>" .$row["total_fees"]."</td>";

}
echo "</table>";
echo "<center>";
echo "<br>";
 

 ?>
Posted
Updated 9-Feb-22 9:05am
v2

If you check the documentation for PHP: mysqli::query - Manual[^] you will clearly see that when the query statement fails the call returns the boolean value FALSE. Do not assume that your API calls always do what you think; check the return values first.
 
Share this answer
 
Look at your SQL:
$query = "select * from v_student_fee LIKE '%$searchterm'";

There are two problems with it:
1) It's not valid SQL syntax.
2) It's very dangerous.

The syntax of a basic SELECT is simple:
SQL
SELECT * FROM MyTable WHERE MyColumn LIKE '%123'
Yours is missing the WHERE keyword, and the column name ... SQL will not "Guess what you mean", you have to explicitly tell it.

And never concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Always use Parameterized queries instead.

When you concatenate strings, you cause problems because SQL receives commands like:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
The quote the user added terminates the string as far as SQL is concerned and you get problems. But it could be worse. If I come along and type this instead: "x';DROP TABLE MyTable;--" Then SQL receives a very different command:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Which SQL sees as three separate commands:
SQL
SELECT * FROM MyTable WHERE StreetAddress = 'x';
A perfectly valid SELECT
SQL
DROP TABLE MyTable;
A perfectly valid "delete the table" command
SQL
--'
And everything else is a comment.
So it does: selects any matching rows, deletes the table from the DB, and ignores anything else.

So ALWAYS use parameterized queries! Or be prepared to restore your DB from backup frequently. You do take backups regularly, don't you?
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900