2011-05-30 2 views
1

Version simplifiée du problème:PHP - Obtenir un tableau d'objets à partir du résultat de la requête

J'ai donc cette requête qui est à l'intérieur d'une fonction.

$query = "SELECT * FROM users"; 
$result = mysql_query($query); 

Comment je veux utiliser mysql_fetch_object() pour obtenir un objet d'une rangée.

Parce que dans la fin que je voulais obtenir un tableau d'objets que je fais ceci:

while ($a[] = mysql_fetch_object($result)) { // empty here } 

En fin de la fonction juste retourne $ a. Et ça marche presque bien. Mon problème est que mysql_fetch_object retournera à la fin une "ligne" NULL (ce qui est normal parce que le résultat s'est terminé mais je l'ai toujours assigné au tableau).

Des idées sur la façon de le faire de manière décente? Merci d'avance.

Répondre

6

Ou vous pouvez déplacer l'affectation de la condition de tout le corps tout comme:

<?php 
while ($entry = mysql_fetch_object($result)) { 
    $a[] = $entry; 
} 
+0

Simple et bon. Merci. –

0

Vous pouvez simplement ajouter

array_pop($a); 

après la while

http://php.net/manual/en/function.array-pop.php

+0

Ne sont généralement pas conseillé, mais étant donné que ce sera toujours là parce que c'est la condition de sortie sur la boucle, c'est un raisonnable Solution. J'ajouterais un commentaire expliquant pourquoi vous êtes 'array_pop'ing bien. –

+0

Je vais garder cette fonction à l'esprit, ça peut être utile parfois. –

3

mysql_fetch_object retourne effectivement FALSE s'il n'y a plus de lignes. Je fais ceci:

$a = array(); 
while (($row = mysql_fetch_object($result)) !== FALSE) { 
    $a[] = $row; 
} 
+0

! == FALSE est inutile ici ^^ – MatTheCat

+0

J'ai toujours considéré le type de vérification des bonnes pratiques en traitant des valeurs de retour booléennes en PHP. Dans ce cas, cela n'aura pas d'importance, mais de nombreux autres, c'est certainement le cas. C'est une pratique de programmation défensive, IMO. –

+0

@MatTheCat à droite. et quand elle renvoie false, la boucle s'arrête. – ShadeTreeDeveloper

0

Cette question semble être double de how to fetch all the row of the result in php mysql?

//Database Connection 
$sqlConn = new mysqli($hostname, $username, $password, $database); 

//Build SQL String 
$sqlString = "SELECT * FROM my_table"; 

//Execute the query and put data into a result 
$result = $this->sqlConn->query($sqlString); 

//Copy result into a associative array 
$resultArray = $result->fetch_all(MYSQLI_ASSOC); 

//Copy result into a numeric array 
$resultArray = $result->fetch_all(MYSQLI_NUM); 

//Copy result into both a associative and numeric array 
$resultArray = $result->fetch_all(MYSQLI_BOTH); 
Questions connexes