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.