2014-09-14 3 views
0

dans mon dernier projet j'ai utilisé foreach boucle pour attribuer à chaque résultat mysqli une variable, comme $r->mydata, mais j'ai formaté mon pc accidentellement, donc j'ai perdu mon fichier de base et je ne me souviens pas comment exactement je l'ai fait. Je me souviens que je l'ai fait quelque chose comme çaPHP mysqli résultat de la requête echo avec boucle foreach

$result = $db->query("SELECT * FROM data"); 
if($result->num_rows){ 
    while ($row = $result->fetch_object()) { 
     foreach ($row as $r){ 
      $row[] = $r; 
     } 
    } 
} 

Et je peux accéder au résultat de l'extérieur de la boucle while comme ceci:

<?php echo $r->mydata ?> 

Quelqu'un peut-il modifier mon code il fonctionnera comme avant?

+0

d'abord si la condition doit être si ($ result-> num_rows()> 0) et retirer foreach de tout remerciement boucle –

+0

pour l'avis, mais je veux être en mesure de faire écho le résultat comme ceci encore: mydata?>, tout ce dont je me souviens c'est que j'ai utilisé une boucle foreach pour faire ça, mais j'ai oublié comment :( – Adam

+1

Sans savoir ce que votre code a fait avant ou la structure de votre table de base de données, il est presque impossible de vous aider. –

Répondre

1

il serait plus facile à utiliser

$rows=$result->fetch_all(MYSQLI_ASSOC); 

plutôt que boucle à travers toutes les lignes et la construction d'un tableau.

+0

Je viens de regarder votre édition, vous parcourez tous les résultats et écraser à répétition '$ r' avec les lignes les unes après les autres. Le résultat ne vous laissera que la dernière ligne dans '$ r' et c'est un moyen très inefficace de l'obtenir' $ rows = $ result-> fetch_all (MYSQLI_ASSOC); $ r = $ rows [count ($ rows) -1] 'feraient exactement la même chose dans beaucoup moins de cycles cpu – andrew

0

Peut-être que vous ne vous souvenez pas comment vous l'avez fait, mais si vous l'avez fait une fois que vous devez savoir au moins que vous approchez suiviez pour résoudre cela, nous allons vous aider à comprendre le code premier:

$result = $db->query("SELECT * FROM data"); 
if($result->num_rows>0){ 
    //iterating only if the table is not empty 
    while ($row = $result->fetch_object()) { 
     //Here you are iterating each row of the database 
     foreach ($row as $r){ 
      //Here you are iterating each column as $r 
      //and (trying) adding it again to the $row array 
      $row[] = $r; 
     } 
    } 
} 

Pourquoi voulez-vous accéder à la $row en dehors de la boucle, si ce que vous voulez faire est d'imprimer chaque ligne, vous pouvez le faire à l'intérieur de la boucle:

$result = $db->query("SELECT * FROM data"); 
if($result->num_rows>0){ 
    while ($row = $result->fetch_object()) { 
     foreach ($row as $r){ 
      echo $r.'<br>'; 
     } 
    } 
} 
+0

Je veux y accéder en dehors de la boucle parce que j'en ai besoin pour faire un réseau social :) – Adam

0

Si vous faites quelque chose comme ce qui suit, quelle partie les données 'imprimées' avez-vous besoin? Vous avez peut-être été « spécialisée » le jeu de résultats en éliminant les lignes à utiliser uniquement une seule ligne ...

$result = $db->query("SELECT * FROM data"); 

$r = new stdClass(); 

// Only loop if there is a result. 
if ($result) 
{ 
    $r->myData = []; // You aren't exactly clear on 'myData'. In this instance, I am setting the rows inside of it. 
    while ($row = $result->fetch_object()) 
    { 
     $r->myData[] = $row; 
    } 

    $result->close(); // Free result set 
} 

print_r($r->myData); 
0
$records = array(); 
$result = $db->query("SELECT * FROM data"); 
if($result->num_rows){ 
while ($row = $result->fetch_object()) { 
    $records[] = $row; 
    foreach($records as $r); 
} 
} 

et vous pouvez maintenant accéder au résultat de tout dans la page, par exemple l'écho intérieur html h1:

<h1>My name is: <?php echo $r->name ?></h1> 
+1

Désolé pour le vote bas mais votre réponse est absurde, vous êtes ** double ** en boucle à travers toutes les lignes et tout ce que vous finissez avec pour vos efforts est la dernière rangée stockée dans '$ r' – andrew