2
votes

Répétez WHILE avec le même SELECT

Pourquoi ne puis-je pas utiliser le même while deux fois?

Je voudrais répéter la même chose sur la page et je ne peux pas, il suffit de charger le premier.

Exemple:

<?php do{ ?>
    <option value="<?php echo $ID; ?>">
        <?php echo $nome; ?>
    </option>
<?php } while ($row = $rs->fetch_assoc()); ?>

While 1 (Situé en haut du site)

<?php do{ ?>
    <option value="<?php echo $ID; ?>">
        <?php echo $nome; ?>
    </option>
<?php } while ($row = $rs->fetch_assoc()); ?>

While 2 (Situé à la fin du site)

$rs = $mysqli->query("SELECT * FROM site WHERE id = '".$cliente."' ");
$row = $rs->fetch_assoc();

Merci.


1 commentaires

utilisez des requêtes paramétrées pour améliorer les performances, vous épargner une tonne de bogues et sécuriser votre base de données. pour le moment, votre code est vulnérable aux attaques par injection SQL


3 Réponses :


2
votes

Lorsque vous faites $ rs-> fetch_assoc () , vous extrayez des lignes du tableau de résultats, à utiliser avec cette condition plusieurs fois, vous devez remplir $ rs à nouveau en exécutant la requête à nouveau avant tout ou je vous recommande d'enregistrer votre résultat dans une autre variable et de l'utiliser à tout moment comme ceci

$result = $mysqli->query("SELECT * FROM site WHERE id = '".$cliente."' ");
$rs = $result;
$row = $rs->fetch_assoc();

//WHILE 1
<?php do{ ?>
<option value="<?php echo $ID; ?>">
      <?php echo $nome; ?>
</option>
<?php } while ($row = $rs->fetch_assoc()); ?>
//$rs is empty now

$rs = $result; //setting $rs again
//WHILE 2
    <?php do{ ?>
    <option value="<?php echo $ID; ?>">
          <?php echo $nome; ?>
    </option>
    <?php } while ($row = $rs->fetch_assoc()); ?>


0 commentaires

1
votes

La première boucle a consommé toutes les données de MySQL.

Donc, la deuxième boucle n'a rien à consommer.

Ce que vous pouvez faire est:

Récupère toutes les données de la première boucle dans un seul tableau.

Utilisez-le une deuxième fois.

De plus, vous augmentez les trajets de serveur entre PHP et MySQL.

Vous devriez toujours avoir tendance à réduire les déplacements des serveurs PHP et MySQL.


0 commentaires

3
votes

Stockez vos résultats dans un tableau à la place et faites une boucle là où c'est nécessaire. Sinon, vous devrez réinitialiser le curseur de votre résultat avant de recommencer.

$query = $mysqli->query("SELECT * FROM site WHERE id = '".$cliente."' ");
$result = $query->fetch_all(MYSQLI_ASSOC);

// Loop wherever needed
foreach ($result as $r) {
    // Use $r
}

// Loop the result again!
foreach ($result as $r) {
    // Use $r
}

Nous vous recommandons également d'utiliser une instruction préparée au lieu d'utiliser une requête directe avec des variables injectées.

  • PHP.net sur mysqli_result :: fetch_all ()

  • 0 commentaires