0
votes

répliquer / dupliquer / cloner un objet mysql_result

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);


0 commentaires

3 Réponses :


0
votes

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
}


0 commentaires

0
votes

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
}


0 commentaires

1
votes

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:

https://www.php.net/manual/en/mysqli-result.data-seek.php


1 commentaires

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.