Troubleshooting Guide: How to Resolve Warning: mysqli_num_rows() Expects Parameter 1 to be mysqli_result in PHP

This troubleshooting guide will help you resolve the Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result error that you may encounter while working with PHP and MySQL. We will go through the steps to identify the cause of the problem and provide solutions to fix it.

Table of Contents


The mysqli_num_rows() function is used to count the number of rows returned by a SELECT query in PHP. This function takes one parameter, which should be a valid MySQL result set object. The warning occurs when the function receives a parameter that is not a valid MySQL result set object.

$result = mysqli_query($connection, $query);
$num_rows = mysqli_num_rows($result);

Identifying the Cause

The most common causes for this warning are:

  1. The SQL query is incorrect or contains syntax errors.
  2. The MySQL connection has not been established or has failed.
  3. The result object was not properly fetched using mysqli_query().

Step-by-Step Solution

Follow these steps to troubleshoot and resolve the issue:

Step 1: Check the SQL Query

Verify that your SQL query is correct and contains no syntax errors. You can test your query directly in a MySQL client or a tool like phpMyAdmin.

Step 2: Verify the MySQL Connection

Make sure that your MySQL connection is established and valid. You can test the connection using the following code:

$connection = mysqli_connect($hostname, $username, $password, $database);

if (!$connection) {
    die("Connection failed: " . mysqli_connect_error());
} else {
    echo "Connected successfully";

Step 3: Fetch the Result Object

Ensure that you are fetching the result object correctly using the mysqli_query() function. The function should return a valid MySQL result set object when the query is successful. If there is an error, it will return FALSE.

$result = mysqli_query($connection, $query);

if (!$result) {
    die("Query failed: " . mysqli_error($connection));

Step 4: Check the Parameter Passed to mysqli_num_rows()

Finally, confirm that you are passing a valid MySQL result set object to the mysqli_num_rows() function. If the result object is not valid, the function will trigger the warning.

$num_rows = mysqli_num_rows($result);

if ($num_rows !== false) {
    echo "Number of rows: " . $num_rows;
} else {
    echo "Invalid result object";


1. Can I use mysqli_num_rows() with other SQL statements like INSERT or UPDATE?

No, mysqli_num_rows() is only used with SELECT queries. For INSERT, UPDATE, or DELETE queries, you should use the mysqli_affected_rows() function.

2. How can I suppress the warning message?

You can use the error control operator @ before the function call to suppress the warning message. However, it is not recommended since it may lead to unhandled errors.

$num_rows = @mysqli_num_rows($result);

3. Can I use mysqli_num_rows() with prepared statements?

Yes, you can use mysqli_num_rows() with prepared statements. However, you need to use mysqli_stmt_store_result() first to store the result set and then mysqli_stmt_num_rows() to get the number of rows.

4. Can I use mysqli_num_rows() to count rows of a table without fetching the results?

Yes, you can use mysqli_num_rows() to count rows of a table without fetching the results by using a SELECT COUNT(*) query.

5. Can I use mysqli_num_rows() with the PDO extension?

No, mysqli_num_rows() is specific to the MySQLi extension. For the PDO extension, you can use the PDOStatement::rowCount() method.

If you have any questions or need further assistance, feel free to ask in the comments below. Good luck, and happy coding!

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.