J'essaie d'enregistrer dans un fichier une requête mysql SELECT comme suit:
while ($row = mysqli_fetch_assoc($result)) { //embed html code }
après l'enregistrement, je dois publier sur une page comme suit:
$result = mysqli_query($db,$sql); $out = fopen('tmp/csv.csv', 'w'); while ($row = $result -> fetch_row()) { fputcsv($out,$row); } fclose($out);
3 Réponses :
Si vous devez réutiliser les données, chargez-les dans un tableau - ou faites toute la logique dans la même boucle.
Par exemple,
$result = mysqli_query($db, $sql); $out = fopen('tmp/csv.csv', 'w'); while ($row = $result->fetch_row()) { fputcsv($out,$row); // embed HTML } fclose($out);
Ou faites tout cela dans la même boucle (cela peut ne pas toujours être possible, donc si ce n'est pas le cas, choisissez l'option ci-dessus).
$data = []: $result = $mysqli->query("..."); while ($row = mysqli_fetch_assoc($result)) { $data[] = $row; } $out = fopen('tmp/csv.csv', 'w'); foreach ($data as $row) { fputcsv($out, $row); } fclose($out); // ... foreach ($data as $row) { //embed html code }
Si mysqlind
est installé dans le cadre de votre infrastructure PHP MySQL, utilisez un fetch_all ()
pour obtenir tous les résultats dans un tableau. Vous pouvez ensuite utiliser ce tableau autant de fois que vous le souhaitez.
$result = mysqli_query($db,$sql); $all_results = []; while ($row = $result -> fetch_assoc()) { $all_results[] = $row; } $out = fopen('tmp/csv.csv', 'w'); foreach ( $all_results as $row){ fputcsv($out,$row); } fclose($out); // now to reuse the array for your HTML output foreach ($all_results as $row) { //embed html code }
Ensuite, vous pouvez réutiliser $all_results
Si vous n'avez pas mysqlind
puis écrivez une simple boucle pour charger manuellement un tableau avec tous les résultats du jeu de résultats
$result = mysqli_query($db,$sql); $all_results = $result->fetch_all(); $out = fopen('tmp/csv.csv', 'w'); foreach ( $all_results as $row){ fputcsv($out,$row); } fclose($out); // now to reuse the array for your HTML output foreach ($all_results as $row) { //embed html code }
Je pense qu'une autre solution qui pourrait fonctionner est d'utiliser mysqli_data_seek
.
L'objet mysqli_result est un pointeur qui se déplace dans les données à chaque appel de fetch_row (), mais vous pouvez ramener le pointeur au début en appelant
mysqli_data_seek($result, 0);
Et maintenant le résultat est "reset", pour ainsi dire, et vous pouvez l'utiliser à nouveau.
En savoir plus ici:
cela fonctionne, c'est aussi le moyen le plus simple en raison du fait qu'il n'y a pas besoin de correctif, tout l'ancien code reste le même.