mysqli fetch_all() not a valid function?
PhpMysqliPhp Problem Overview
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?
Php Solutions
Solution 1 - Php
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 - Php
mysqli::fetch_all()
needs mysqlnd
driver to be installed before you can use it.
Solution 3 - Php
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 - Php
Issue seems to be 'mysqli' and 'mysqlnd' are not working together. I had the same issue in cpanel
Steps:
-
Go to CPanel dashboard
-
Go to 'Select PHP Version', you should see a bunch of checkboxes
-
Set PHP version (5.4 or above)
-
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 - Php
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.
Solution 6 - Php
As an addition to Fabrizios answer, please consider building up your array with a loop:
$array = array();
while($row = $result->fetch_assoc())
$array[] = $row;
Solution 7 - Php
If you don't want to iterate using Karolis' answer,
use
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
{
$rows[] = $row;
}
to achieve the same result as
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
You may change constant to MYSQLI_NUM
or MYSQLI_BOTH
.
This optional parameter are constants indicating what type of array should be produced from the current row data.
Notice that mysqli_fetch_array($result,MYSQLI_ASSOC )
behaves identically to the mysqli_fetch_assoc()
function, while mysqli_fetch_array($result,MYSQLI_NUM)
will behave identically to the mysqli_fetch_row()
function. The final option MYSQLI_BOTH
will create a single array with the attributes of both.
http://php.net/manual/en/mysqli-result.fetch-array.php
Solution 8 - Php
I had 5.6 but didn't work for me anyway. By enabling the mysqlnd driver it worked for me. Just write apt-get install php5-mysqlnd
then restart php and you're good to go!
Solution 9 - Php
PHP Fatal error: Call to undefined function mysqli_fetch_all()
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);//not work
change to:php 5.3 or
$query = "SELECT * FROM `user_counter` ORDER BY id DESC LIMIT 20";
$result = mysqli_query($connection, $query) or die
("Error in Selecting " . mysqli_error($connection));
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
echo json_encode($rows);
Solution 10 - Php
Just to add an additional note about the mysqlnd
driver: It also has to have the mysqli
API extension installed. Without the extension, fetch_all()
still won't be available. I found this while troubleshooting why my code worked on one server but not another, both PHP > 5.3. Use phpinfo()
to verify the installed extensions.
Solution 11 - Php
function runQuery($query) {
$result = mysqli_query($this->conn,$query);
$resultset = array(); //you need to define array
while($row=$result->fetch_assoc()) {
$resultset[] = $row; //then insert result into the array
}
if(!empty($resultset))
{
return $resultset;}
else{return 'empty';};
}