IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Equivalent PHP à "into outfile" [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Equivalent PHP à "into outfile"
    Bonjour,

    J'ai une application Web qui utilise "into outfile" pour créer des fichiers CSV. Nous avons migré la base de données sur un nouveau serveur, et pour des raisons de sécurité, je ne peux plus utiliser cette manipulation.

    Je voudrais donc créer le fichier csv avec PHP plutôt que MySQL. J'essais donc de comprends into outfile mais j'ai quelques problèmes...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "SELECT `xxxxxx` , `xxxxx` , `xxxxxx`, `xxxxxx` FROM `xxxxxx` WHERE `xxxxx` > ".$lastexport." into outfile '".path."xxxxx.csv' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'";
    Je vais récupérer les résultats dans une boucle et créer le fichier en PHP. Que signifie cette partie?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OPTIONALLY ENCLOSED BY '\"'

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    Citation Envoyé par babastutz Voir le message
    Je vais récupérer les résultats dans une boucle et créer le fichier en PHP. Que signifie cette partie?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OPTIONALLY ENCLOSED BY '\"'
    c'est expliqué dans la documentation officielle de MySQL là :
    http://dev.mysql.com/doc/refman/5.0/fr/load-data.html

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Un petit tour sur la doc
    ENCLOSED BY signifie que les champs sont encadrés par le caractère indiqué (ici ")
    OPTIONALLY signifie que seuls les champs appropriés le seront.

    If you specify OPTIONALLY, the ENCLOSED BY character is used only to enclose values from columns that have a string data type (such as CHAR, BINARY, TEXT, or ENUM):

    1,"a string",100.20
    2,"a string containing a , comma",102.20
    3,"a string containing a \" quote",102.20
    4,"a string containing a \", quote and comma",102.20
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponses.

    [edit]

    J'ai créer cette version de la création du fichier CSV en PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    $sql = "SELECT `xxxxxx` , `xxxxx` , `xxxxxx`, `xxxxxx` FROM `xxxxxx` WHERE `xxxxx` > ".$lastexport;
    $res = send_sql($sql);
    $nbr_cols = mysql_num_fields($res);
    $nbrY = 0;
    $fp = fopen(path."xxxxxx.csv","w");
     
    while ($row = mysql_fetch_row($res))
    {
    	$list = array();
    	for($i = 0; $i < $nbr_cols; $i++)
    	{
    		if($i == 0)
    			$list[$nbrY] = $row[$i];
    		else
    			$list[$nbrY] = $list[$nbrY].";".$row[$i];
    	}
    	foreach ($list as $line)
    	{
    		fputcsv($fp,split(',',$line), ";", '"');
    	}
    	$nbrY++;
    }
    fclose($fp);
    Le problème est que j'ai un fichier comme cela :

    "xxxxx;;xxxxxx;xxx;xxx;;;;;xxx"
    Alors que avant, j'en avais un comme celui-là :

    "xxxxx";"xxxxxx";"";"";"xxxxx"
    Est-ce que vous savez d'où cela peut provenir?
    Dernière modification par Invité ; 01/09/2009 à 13h46.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Je me réponds encore

    Voilà la solution finale qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    $sql = "SELECT `xxxxxx` , `xxxxx` , `xxxxxx`, `xxxxxx` FROM `xxxxxx` WHERE `xxxxx` > ".$lastexport;
    $res = send_sql($sql);
    $nbr_cols = mysql_num_fields($res);
    $nbrY = 0;
    $fp = fopen(path."xxxxxx.csv","w");
     
    while ($row = mysql_fetch_row($res))
    {
    	$list = array();
    	for($i = 0; $i < $nbr_cols; $i++)
    	{
    		if($i == 0)
    			$list[$nbrY] = $row[$i];
    		else
    			$list[$nbrY] = $list[$nbrY].";".$row[$i];
    	}
    	foreach ($list as $line)
    	{
    		fputcsv($fp,split(';',$line), ";", '"');
    	}
    	$nbrY++;
    }
    fclose($fp);
    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP-JS] Probleme de quote
    Par pierre50 dans le forum Langage
    Réponses: 2
    Dernier message: 29/09/2006, 11h38
  2. [PHP-JS] Problème de Quote
    Par Cyrilh7 dans le forum Langage
    Réponses: 19
    Dernier message: 08/08/2006, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo