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 :

Formatage CSV "mange" la dernière ligne de ma requête Oracle [Oracle]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Février 2006
    Messages : 32
    Points : 29
    Points
    29
    Par défaut Formatage CSV "mange" la dernière ligne de ma requête Oracle
    Bonjour à tous,

    En premier lieu, je suis tout jeune débutant sur PHP (4 jours), alors excusez mon ignorance.

    Je lance une requête SELECT simple sous Oracle qui devrait me retourner deux lignes de resultat. Ma requête est Ok sous SQL Developper.

    Sous PHP elle me retourne bien 2 lignes, mais c'est la ligne d'en tête et la première ligne de data au lieu des deux lignes de data.

    Quand je change le order by de ma requete j'ai bien ma première ou ma dernière ligne de mon select, c'est donc dans le PHP que cela bug.

    Vous trouverez mon code ci-dessous. Ma question : Comment faire pour que j'ai en retour (echo $out) ma ligne d'en-têtes + mes deux lignes de data ? et non ma ligne d'en-tête + ma première ligne de data seulement.

    Deux remarques : j'ai pris le code de formatage des lignes sur le net, et je renvoie le resultat en "echo" pour le récupérer sous Excel.

    Merci de votre aide, je craque là !

    Creepy

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    try
    	{
    		$stid = oci_parse($conn, $query);
     
    		if (!$stid) 
    		{
    			$e = oci_error($conn);
    			$msg_err = 'ERROR: Oracle query parse: '. htmlentities($e['message'], ENT_QUOTES);
    			echo $msg_err;
    			error_log($msg_err.';Date:' .date("d/m/Y H:i:s").';'.'Username:' .$user_name.chr(13), 3, $log_folder.$log_error);		
    			exit;
    		}
     
    		$result = oci_execute($stid);
    		if (!$result) 
    		{
    			$e = oci_error($conn);
    			$msg_err = 'ERROR: Oracle query execute: '. htmlentities($e['message'], ENT_QUOTES);
    			echo $msg_err;
    			error_log($msg_err.';Date:' .date("d/m/Y H:i:s").';'.'Username:' .$user_name.chr(13), 3, $log_folder.$log_error);		
    			exit;
    		}
    	}
    	catch(ErrorException $ex)
    	{
    		$msg_err = 'ERROR: '. htmlentities($ex->getMessage(), ENT_QUOTES);
    		echo $msg_err;
    		error_log($msg_err.';Date:' .date("d/m/Y H:i:s").';'.'Username:' .$user_name.chr(13), 3, $log_folder.$log_error);		
    		exit;
    	}
     
    	restore_error_handler();
     
    	$row = Oci_fetch_array($stid,OCI_RETURN_NULLS);
     
    	if (!is_array($row))
    	{
    		echo 'ERROR: NORECORD';
    		exit;
    	}
     
    	$line = "";
    	$comma = "";
    	foreach($row as $name => $value)
    	{
    		$line .= $comma . '"' . str_replace('"', '""', $name) . '"';
    		$comma = ";";
    	}
    	$line .= "\n";
    	$out = $line;
     
    	while($row = Oci_fetch_array($stid,OCI_RETURN_NULLS))
    	{
    		$line = "";
    		$comma = "";
    		foreach($row as $value)
    		{
    			$line .= $comma . '"' . str_replace('"', '""', $value) . '"';
    			$comma = ";";
    		}
    		$line .= "\n";
    		$out.=$line;
    	}
     
    	// Renvoi du resultat
    	echo $out;

  2. #2
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Février 2006
    Messages : 32
    Points : 29
    Points
    29
    Par défaut Réponse !
    Re,

    Bon alors j'ai trouvé.

    En fait le premier oci_fetch catch la première "ligne" pour extraire les noms des colonnes.
    De ce fait dans le row count il n'y a plus qu'une ligne sur deux.

    If faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $out = $line;
    $result = oci_execute($stid);
    while($row = Oci_fetch_array($stid,OCI_RETURN_NULLS))
    Ainsi on repart depuis le début. En effet sous oci, il n'existe pas d'equivalent à mysql_date_seek.

    Creepy

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

Discussions similaires

  1. [AC-2003] Selectionner l'avant dernière ligne d'une requête
    Par Piccou dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 25/08/2009, 15h51
  2. Sauvegarde csv problème de quote
    Par BenoitM dans le forum Excel
    Réponses: 2
    Dernier message: 10/07/2007, 00h07

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