Enregistrer résultat requête sql en CSV

Petit nouveau ! | 5 Messages

18 janv. 2022, 11:08

Bonjour,

Je suis en train de tester une méthode pour faire une requête SQL et la générer dans un fichier CSV, malheureusement celle-ci va toujours dans un fichier temporaire dans le dossier temp, savez vous si il y a la possibilité de dire ou doit s’enregistrer ce fichier ? (par exemple dans le même dossier que la page PHP ?)

Merci pour votre aide !
<?php
// Nom de la table à exporter
$db_record = 'xxx';

// En option : conditionnels de la requête d'export (WHERE, ORDER BY, LIMIT, etc.)
$where = '';

// Nom du fichier CSV à exporter
$csv_filename = $db_record.'_'.date('Y-m-d').'.csv';

// Variables de connexion à la base des données
$hostname = "xxx";
$user = "xxx";
$password = "xxx";
$database = "xxx";
$port = xxx;

// Connexion à la base
$conn = mysqli_connect($hostname, $user, $password, $database, $port);
if (mysqli_connect_errno()) {
    die("Echec de la connexion : " . mysqli_connect_error());
}
/* si vous avez des erreurs d'accents dans les données extraites, selon l'encodage de la base :
// latin1 > UTF8
mysqli_set_charset($conn, "utf8");
// ou UTF8 > ISO-8859-1
mysqli_set_charset($conn, "latin1"); */

// Création d'un fichier CSV vide
$csv_export = '';

// Extraction des données de la table
$query = mysqli_query($conn, "SELECT xxxxx");
$field = mysqli_field_count($conn);

// Création de la ligne des titres (noms des champs)
for($i = 0; $i < $field; $i++) {
    $csv_export.= mysqli_fetch_field_direct($query, $i)->name.';';
}

// Nouvelle ligne (semble fonctionner avec Linux & Windows servers)
$csv_export.= '
';

// Boucle des tuples pour remplir le fichier
while($row = mysqli_fetch_array($query)) {
    for($i = 0; $i < $field; $i++) {
        $csv_export.= '"'.$row[mysqli_fetch_field_direct($query, $i)->name].'";';
    }
    $csv_export.= '
';
}

// Export des données au format CSV et appel du fichier créé pour téléchargement
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=".$csv_filename."");
echo($csv_export);
?>

Mammouth du PHP | 1029 Messages

20 janv. 2022, 16:56

Personnellement, je viens de tester votre code et il me demande bien de l'enregistrer (Mint/FF)
L'expérience est la somme de toutes nos erreurs.

Eléphant du PHP | 82 Messages

21 janv. 2022, 19:35

Bonsoir,

Tu dois exporter le fichier quelque part.
<?php
...
// Nom du fichier CSV à exporter
$csv_filename = $db_record.'_'.date('Y-m-d').'.csv';
...
if(file_exists($csv_filename)) unlink($csv_filename);
file_put_contents( $csv_filename , $csv_export );

// Export des données au format CSV et appel du fichier créé pour téléchargement
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=".$csv_filename."");
echo($csv_export);
?>