Problème de SELECT * INSERT INTO
RésoluBonjour
je galère sur une syntaxe que je n'arrive pas à corriger. Je voudrais faire la sauvegarde de mes données annuelles en fichier csv, excel ou autre. J'ai parcouru les sites et tous semblent indiquer la même chose, mais de façon incomplète. Merci de corriger ma requête si possible. Mon dossier reste désespéramment vide mais je n'ai aucun message d'erreur. Je précise que ceci avec ou sans le while, et que si je ne mets pas le into outfile etc.. elle fonctionne
Merci d'avance
$myreq = "select * from adherents where annee = $exer into outfile 'C:\\temp\\CSV.csv'";
$result = mysqli_query($conn, $myreq);
while ($row = mysqli_fetch_array($result))
{
echo "ID".$row[0]." ". $row[2]." ".$row[3]." ".$row[4]." ".$row[5]." ".$row[6]." ".$row[7]." ".$row[8]." ".$row[9]." ".$row[10]." ".$row[11]." ".$row[12]." ".$row[13]."<br>";
}
5 réponses
-
Modérateur
bonjour
commence par mettre des quotes autour de l'année
$myreq = "select * from adherents where annee = '$exer' into outfile 'C:\\temp\\CSV.csv'";
et si ca ne marche toujours pas, fais un echi de ta variable $myreq pour voir à quoi elle ressemble puis teste la directement dans ta bdd via phpmyadmin par exemple.
n'hésite pas non plus à afficher les eventuelles erreurs après l'exécution de la requête via
echo("Error description: " . mysqli_error($conn)); }
-
-
@clé de 12
je vais chercher encore un peu puis je ferai des sauvegardes directement sur la table...
Connais tu la syntaxe pour sauvegarder les données d'une table (le contraire de DROP).
Mais ce n'est pas le but du jeu car je compte déléguer au président de l'association (qui est plus nul que moi en informatique) une version quasi automatique
Merci quand même
-
-
-
Contributeur
bonjour,
si tu supprimes la cause into, la page affiche bien tes enregistrements?
-
-
Contributeur@clé de 12
Tu as bien vérifié que le fichier n'existait pas avant d'exécuter la requête?
Le fichier est donc créé par la requête, mais est vide?
-
-
Oui... tout est nickel tant que je ne tente pas le into outfile
-
Modérateur
Bonjour,
Une suggestion. Il est fort probable que php ne puisse pas écrire par défaut hors du contexte du serveur web et de sa racine /, et même les dossiers du serveur web devraient par sécurité être interdits en écriture. Tu peux au moins vérifier avec un nom de fichier
into outfile 'CSV.csv'
que tu pourrais retrouver dans le même répertoire que le source php.
Après pour régler les droits d'accès aux répertoires cela doit se faire dans ton serveur web (apache ?).
-
Voili, voila! J'ai trouvé comment détourner ce fichu outfile.
J'ai créé un fichier sauvegarde.doc puis avec fwrite je complète mon fichier.
Pour le moment j'ai une seule ligne (la dernière) qui s'écrit mais je vais peaufiner.la requête pour avoir toutes mes lignes et séparation en SPV.
Le fichier sera plus facile à rapatrier.
$file = "./sauvegarde.doc";
$fh = fopen($file, 'r+');
while ($row = mysqli_fetch_array($result))
{
$donnees="ID".$row[0].", ". $row[2]." ,".$row[3].", ".$row[4]." , ".$row[5]." ,".$row[6].", ".$row[7].", ".$row[8].", ".$row[9].", ".$row[10]." ,".$row[11].", ".$row[12].", ".$row[13]."/n";
fwrite($fh, $donnees);
}
fclose($fh);-
Version finale qui fonctionne très bien :
<?php $conn=mysqli_connect($DBserveur, $DBlogin, $DBpassword,$DBbase); $lines = file("https://pmcc.wf/fichier-2024.csv"); // Affiche toutes les lignes du tableau comme code HTML foreach ($lines as $line_num => $line) { $myfile= explode(';', htmlspecialchars($line)); $prenom= $myfile[0]; $nom= $myfile[1]; $adhes= $myfile[2]; $don= $myfile[3]; ///le nom est obligatoire /////// if (strlen($nom)>2) { $myreq="INSERT INTO `adherents`(prenom, nom, annee, adhesion) VALUES ('$prenom','$nom','2324', '$adhes')"; //On vérifie la connexion if($conn->connect_error) { die('Erreur : ' .$conn->connect_error); } $exec=mysqli_query($conn,$myreq); } } // Utilisation de drapeau $trimmed = file('somefile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); ?>C'est peut être scolaire et on doit trouver mieux; mais c'est ma solution pour ce input outfile qui ne doit écrire que dans le fichier parent...si on a l'autorisation pour ce faire.
Merci à tous
-