mysqli fetch_all() not a valid function?

Thanks to the answers I have figured out that I am unable to use fetch_all() because i am using PHP 5.2.17 - fetch_assoc with while loop worked.


The function I am using fetch_all is coming back with this error:

Fatal error: Call to undefined method mysqli_result::fetch_all() in

$mysqli = new mysqli($host, $username, $password, $database);
$query = "LONG QUERY that works, tested in phpmyadmin"
$result = $mysqli->query($query);
$result->fetch_all(); or  $mysqli->fetch_all() tried both
mysqli_fetch_all() was already tried.
$mysqli->close(); 

I am able to connect to the DB and I have pulled single rows. When I place the query in PHPMYADMIN I get 5 rows back.

Does this function even work? Is there a way I can place my data into an assoc array on my own?


Solution 1:

This function is available since PHP 5.3.0. Possibly your version is older. Use fetch_assoc() instead.

while ($row = $result->fetch_assoc()) {
    // do what you need.
}

Solution 2:

mysqli::fetch_all() needs mysqlnd driver to be installed before you can use it.

Solution 3:

The typical way to construct an associative array is in a while loop:

$results_array = array();
$result = $mysqli->query($query);
while ($row = $result->fetch_assoc()) {
  $results_array[] = $row;
}

Solution 4:

Issue seems to be 'mysqli' and 'mysqlnd' are not working together. I had the same issue in cpanel

Steps:

1) Go to CPanel dashboard

2) Go to 'Select PHP Version', you should see a bunch of checkboxes

3) Set PHP version (5.4 or above)

4) Uncheck the 'mysqli' extension and check both 'mysqlind' and 'nd_mysqli'

Apparently 'nd_mysqli' is 'mysqli' but configured to work with 'mysqlind' and to make it work you have to uncheck 'mysqli' due to settings conflicts.

Following answer I found here helped me.

Solution 5:

Please be careful about using fetch_all():

http://www.php.net/manual/en/mysqli-result.fetch-all.php#88031

Read the note about mysqldn requirement.