web-dev-qa-db-fra.com

mysqli fetch_all () n'est pas une fonction valide?

Grâce aux réponses, j'ai découvert que je ne pouvais pas utiliser fetch_all() parce que j'utilisais PHP 5.2.17 - fetch_assoc avec la boucle while fonctionnait.


La fonction que j'utilise fetch_all revient avec cette erreur: 

Erreur fatale: appel de la méthode non définie mysqli_result :: fetch_all () dans

$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(); 

Je suis capable de me connecter à la base de données et j'ai tiré des lignes simples. Lorsque je place la requête dans PHPMYADMIN, je récupère 5 lignes. 

Est-ce que cette fonction fonctionne même? Est-il possible de placer mes données dans un tableau d'assoc par moi-même?

40
Phil

Cette fonction est disponible depuis PHP 5.3.0. Peut-être que votre version est plus ancienne. Utilisez fetch_assoc() à la place.

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

mysqli::fetch_all() nécessite l'installation du pilote mysqlnd avant de pouvoir l'utiliser.

30
Hassan Azimi

La manière typique de construire un tableau associatif est une boucle while:

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

S'il vous plaît soyez prudent sur l'utilisation de fetch_all ():

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

Lisez la note sur l'exigence de mysqldn.

10
Fabrizio D'Ammassa

En plus de la réponse de Fabrizios, pensez à construire votre tableau avec une boucle:

$array = array();
while($row = $result->fetch_assoc())
    $array[] = $row;
8
Sascha Galley

Utilisation 

texte fort $rows = mysqli_fetch_array($result, MYSQLI_ASSOC); 

pour obtenir le même résultat que $rows = mysqli_fetch_all($result, MYSQLI_ASSOC); si vous ne voulez pas itérer avec la réponse de Karolis

Vous pouvez remplacer constante constante par MYSQLI_NUM ou MYSQLI_BOTH. Ce paramètre facultatif sont des constantes indiquant le type de tableau à produire à partir des données de la ligne en cours.

En utilisant la constante MYSQLI_ASSOC, cette fonction se comportera de manière identique à la fonction mysqli_fetch_assoc (), alors que MYSQLI_NUM se comporterait de manière identique à la fonction mysqli_fetch_row (). La dernière option, MYSQLI_BOTH, créera un seul tableau avec les attributs des deux . http://php.net/manual/en/mysqli-result.fetch-array.php

1
Wilson

J'avais 5,6 mais je n'ai pas travaillé pour moi de toute façon. En activant le pilote mysqlnd, cela a fonctionné pour moi. Il suffit d'écrire apt-get install php5-mysqlnd puis de redémarrer php et vous êtes prêt à partir!

0
Coco

Juste pour ajouter une note supplémentaire sur le pilote mysqlnd: L’extension API mysqli doit également être installée. Sans l'extension, fetch_all() ne sera toujours pas disponible. Je trouvais cela en tentant de comprendre pourquoi mon code fonctionnait sur un serveur mais pas sur un autre, à la fois PHP> 5.3. Utilisez phpinfo() pour vérifier les extensions installées.

0
Chris Langtiw

Erreur irrécupérable PHP: appel de la fonction indéfinie mysqli_fetch_all ()

$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);//not work

changer à: php 5.3 ou

$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);
0
sirmagid
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';};
    }