Fatal error: Call to undefined method mysqli_result::fetch_all()
Asked Answered
S

3

24

I have problems with PHP in Ubuntu 10.04. When I try use mysqli_result::fetch_all this error appears:

Call to undefined method mysqli_result::fetch_all()

However, it works in Windows XP.

The Code:

$result = $this->dbh->query('SELECT [...] ');
return $result->fetch_all(MYSQLI_ASSOC);

I don't want to use fetch_assoc with a loop because I send the result to another layer for processing.

I'm using PHP 5.4.4. and with php -m | grep mysql the mysqlnd module it doesn't appear. How can I install it? Could that be the problem?

Scrobiculate answered 26/7, 2012 at 7:37 Comment(2)
When you say that it "works" on a different platform - do you mean two separate installations of PHP and MySql? Or are you referring to the browser?Kovno
Please check my answer here. https://mcmap.net/q/342221/-mysqli-fetch_all-not-a-valid-functionSamathasamau
D
40

mysqli_result::fetch_all() requires MySQL Native Driver (mysqlnd).

chances are you might be missing it.

have a look at this posts, that might help you.

mysqli fetch_all() not a valid function?

Dragone answered 26/7, 2012 at 7:47 Comment(6)
Ubuntu users can just do: sudo apt-get install php5-mysqlndRheumy
@Ibrahim, Where to download ?Prophylactic
@Pacerier, what OS are you using?Dragone
@IbrahimAzharArmar, Win server 2003.Prophylactic
Try enabling mysqlnd extension, follow the link here for help #23159443Dragone
here are few more link for your reference, php.net/manual/en/mysqlnd.install.php, dev.mysql.com/downloads/connector/php-mysqlnd, unfortunately i do not use windows and hence cannot test, if this does not work, try upgrading your php version it may work.Dragone
S
4

fetch_all consumes more memory than fetch_array() and has other detrimental side effects, so instead of fixing fetch_all, it's better to use fetch_array or fetch_assoc.

Detailed from PHP documentation:

Available only with mysqlnd.

As mysqli_fetch_all() returns all the rows as an array in a single step, it may consume more memory than some similar functions such as mysqli_fetch_array(), which only returns one row at a time from the result set. Further, if you need to iterate over the result set, you will need a looping construct that will further impact performance. For these reasons mysqli_fetch_all() should only be used in those situations where the fetched result set will be sent to another layer for processing.

If you really want to use it, you have to install mySQL with native drive (mysqlnd) Example installation:

./configure --with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \

On Ubuntu you can just do

sudo apt-get install php5-mysqlnd
Stuckup answered 14/1, 2013 at 5:2 Comment(2)
But where is your answer to the question?Surname
This must be a commentCragsman
W
3

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

Available only with mysqlnd.

Notes about enabling mysqlnd: http://www.php.net/manual/en/mysqlnd.install.php

Wenger answered 26/7, 2012 at 7:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.