Maison > Questions et réponses > le corps du texte
J'utilise les entrées de la base de données pour remplir les lignes et les colonnes du tableau. Mais je ne peux pas accéder aux données renvoyées par SQL en utilisant mysqli_fetch_array()
deux fois. Je dois parcourir les résultats de MySQLi plusieurs fois. Cela ne fonctionne pas :
//Copy the result $db_res = mysqli_query( $db_link, $sql ); $db_res2=$db_res; //Top row while ($row = mysqli_fetch_array( $db_res, MYSQL_ASSOC)) { echo "<td>". $row['Title'] . "</td>"; } //leftmost column while ($row = mysqli_fetch_array( $db_res2, MYSQL_ASSOC)) { echo "<tr>"; echo "<td>". $row['Title'] . "</td>"; ..... echo "</tr>"; }
Comment appliquer mysqli_fetch_array
deux fois sur le même résultat ?
P粉0769873862024-03-26 11:21:31
Vous devez toujours séparer la manipulation des données de la sortie.
Sélectionnez d'abord vos données :
$db_res = mysqli_query( $db_link, $sql ); $data = array(); while ($row = mysqli_fetch_assoc($db_res)) { $data[] = $row; }
Notez qu'à partir de PHP 5.3, vous pouvez utiliser fetch_all()
au lieu d'une boucle explicite :
$db_res = mysqli_query( $db_link, $sql ); $data = $db_res->fetch_all(MYSQLI_ASSOC);
Utilisez-le ensuite autant de fois que nécessaire :
//Top row foreach ($data as $row) { echo "<td>". $row['Title'] . "</td>"; } //leftmost column foreach ($data as $row) { echo "<tr>"; echo "<td>". $row['Title'] . "</td>"; ..... echo "</tr>"; }
P粉5935361042024-03-26 10:33:18
Vous n'avez pas besoin de while
循环,也根本不需要使用 mysqli_fetch_array()
!
Vous pouvez simplement l'utiliser dans mysqli_result
对象本身上循环多次。它实现了 Traversable
接口,允许在 foreach
.
//Top row foreach($db_res as $row) { echo "<td>". $row['Title'] . "</td>"; } //leftmost column foreach($db_res as $row) { echo "<tr>"; echo "<td>". $row['Title'] . "</td>"; ..... echo "</tr>"; }
Cependant, vous devez séparer la logique de la base de données de la logique d'affichage, pour y parvenir il est préférable d'utiliser fetch_all(MYSQLI_ASSOC)
dans la logique de la base de données pour récupérer tous les enregistrements dans un tableau.
Si vous extrayez toutes les données dans un tableau, vous pouvez parcourir le tableau autant de fois que vous le souhaitez.
$data = $db_res->fetch_all(MYSQLI_ASSOC); foreach($data as $row) { // logic here... }