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?
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.
}
mysqli::fetch_all()
nécessite l'installation du pilote mysqlnd
avant de pouvoir l'utiliser.
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;
}
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.
En plus de la réponse de Fabrizios, pensez à construire votre tableau avec une boucle:
$array = array();
while($row = $result->fetch_assoc())
$array[] = $row;
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
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!
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.
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);
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';};
}