Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & Oracle
PHP & Oracle Forum d'entraide sur Oracle avec PHP. Avant de poster -> FAQ Oracle et Cours Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/05/2007, 12h00   #1
Invité de passage
 
Inscription : mars 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 10
Points : 2
Points : 2
Par défaut Clause WHERE non prise en compte ou problème de dates ?

Bonjour,

j'ai un petit problème avec l'exécution d'une requête attaquant une base Oracle dans un script PHP.

Voici le bout de code qui construit la requête :
Code :
1
2
3
4
5
6
7
$requete = "SELECT TRAITEMENT, ".$type_req." as VAL FROM XXCC.XXCC_ALR_GTS WHERE trunc(completion_date, '".$trunc."') 
 
= trunc (to_date('01/".$mois_req."/".$annee."', 'DD/MM/YYYY'), '".$trunc."') group by TRAITEMENT order by VAL";
 
$s = OCIParse($conn, $requete);
 
OCIExecute($s, OCI_DEFAULT);
Si je l'affiche pour m'assurer qu'elle a bien été construite, j'obtiens par exemple :

Code SQL :
SELECT TRAITEMENT, AVG(DUREE_MOY) AS VAL FROM XXCC.XXCC_ALR_GTS WHERE trunc(completion_date, 'Month') = trunc (to_date('01/5/2007', 'DD/MM/YYYY'), 'Month') GROUP BY TRAITEMENT ORDER BY VAL

... ce qui semble correct. Tout du moins, lorsque je l'exécute dans un requêteur (en l'occurence TOAD), j'ai le bon résultat (dans mon cas, 64 rows).


Puis vient ma petite boucle pour récupérer ces lignes dans PHP :

Code :
1
2
3
4
5
6
7
$data = array();
$legends = array();
 
while (OCIFetch($s)) {
	array_push($data, ociresult($s, "VAL"));
	array_push($legends, ociresult($s, "TRAITEMENT"));
}
Et là (oui, c'est le drame) $data et $legends contiennent chacun environ 250 éléments : exactement comme si la clause WHERE n'avait pas été prise en compte.

Je fais mes premiers pas dans le monde PHP/Oracle, peut-être y a-t-il quelque chose que j'ignore à propos de la gestion des dates, quelque chose qui marche directement sur la base mais pas via PHP, ou je ne sais quoi encore ?

Si quelqu'un a une idée





Quelques petites infos au cas où : je développe sur EasyPHP 1.8, qui inclut PHP 4.3.1 je crois ; j'ai rajouté l'extension php_oci8.dll. Le but du WHERE est de sélectionner les lignes dont la date correspond à un mois et/ou une année donnée, j'utilise trunc car j'ai trouvé ça quelque part mais peut-être y a-t-il une meilleure façon de faire ?
nicobest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 14h47   #2
Invité de passage
 
Inscription : mars 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 10
Points : 2
Points : 2
J'ai modifié ma requête de plusieurs manières, en particulier de la façon suivante :
Code :
1
2
3
4
5
6
7
8
9
$requete = "SELECT TRAITEMENT, ".$type_req." as VAL 
FROM XXCC.XXCC_ALR_GTS 
WHERE to_char(completion_date, 'YYYYMM') = '".$annee.$mois_req."' 
group by TRAITEMENT 
order by VAL";
 
$s = OCIParse($conn, $requete);
 
OCIExecute($s, OCI_DEFAULT);
... qui revient à :
Code SQL :
1
2
3
4
5
SELECT TRAITEMENT, AVG(DUREE_MOY) AS VAL 
FROM XXCC.XXCC_ALR_GTS 
WHERE to_char(completion_date, 'YYYYMM') = '200705' 
GROUP BY TRAITEMENT 
ORDER BY VAL

...ce qui semble très bien. L'exécution dans TOAD me retourne bien seulement 64 lignes. Il s'agit donc là d'une comparaison de chaînes et non de dates (?).

Pourtant, il y a toujours 226 éléments dans mes arrays par la suite (soit le nombre de lignes obtenus sans le WHERE).


... comprends pô
nicobest est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2007, 16h22   #3
Invité de passage
 
Inscription : mars 2005
Messages : 10
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 10
Points : 2
Points : 2
Bon, j'ai trifouillé avec les opérateurs de comparaison, remplacé mon = par des <=, >=, LIKE, etc.

Au bout d'un moment j'ai remis = et ça a commencé à marcher. La requête est pourtant exactement la même... Peut être un problème de cache, je sais pas :/
nicobest est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h18.


 
 
 
 
Partenaires

Hébergement Web