Probleme de requete

Petit nouveau ! | 7 Messages

19 août 2010, 15:15

Bonjour,

J'ai un problème avec une requête, celle-ci fonctionne en local sous un environnement windows, mais ne fonctionne pas sur le serveur qui héberge mon site (qui est en linux).

Voici la requette :

Code : Tout sélectionner

//CREER LA CONNEXION A LA BASE require_once ("connexion.php"); global $conn; //Creation d'une image du tableau que j'obtiens dans mon script $tab5[] =array( array( "dateduj"=>"2010-09-01", "Num_Contrat_FM"=>"8", "Num_Produit"=>"57", "Id_Ets"=>"6"), array( "dateduj"=>"2010-09-01", "Num_Contrat_FM"=>"7", "Num_Produit"=>"296", "Id_Ets"=>"6") ); //réalise la première boucle foreach ($tab5 as $key=>$ligne) { //réalise la seconde boucle for($i=0; $i<2; $i++){ $dateduj = $ligne[$i]["dateduj"]; $Num_Contrat_FM = $ligne[$i]["Num_Contrat_FM"]; $Num_Produit = $ligne[$i]["Num_Produit"]; $Id_Ets = $ligne[$i]["Id_Ets"]; //prépare la requette $sql = "SELECT YEAR(DATE_ADD((DATE_ADD(contrat_fm.`Date_Anniversaire`, INTERVAL (ROUND(DATEDIFF('$dateduj',contrat_fm.`Date_Anniversaire`)/365)*1)YEAR)), INTERVAL -17 MONTH)) AS `YEARold`, MONTH(DATE_ADD((DATE_ADD(contrat_fm.`Date_Anniversaire`, INTERVAL (ROUND(DATEDIFF('$dateduj',contrat_fm.`Date_Anniversaire`)/365)*1)YEAR)), INTERVAL -17 MONTH)) AS `MONTHold`, YEAR(DATE_ADD((DATE_ADD(contrat_fm.`Date_Anniversaire`, INTERVAL (ROUND(DATEDIFF('$dateduj',contrat_fm.`Date_Anniversaire`)/365)*1)YEAR)), INTERVAL -5 MONTH)) AS `YEARnew`, MONTH(DATE_ADD((DATE_ADD(contrat_fm.`Date_Anniversaire`, INTERVAL (ROUND(DATEDIFF('$dateduj',contrat_fm.`Date_Anniversaire`)/365)*1)YEAR)), INTERVAL -5 MONTH)) AS `MONTHnew`, IF ( CURDATE() < (DATE_ADD(DATE_ADD(contrat_fm.Date_Anniversaire, INTERVAL 12 MONTH),INTERVAL -1 DAY)),contrat_fm.Date_Indice_An,NULL)AS `ANactu`, contrat_fm.Num_Contrat_FM, contrat_fm.Id_Ets, histo_contrat_fm.Num_Produit, histo_contrat_fm.Num_Motif_Resiliation_Produit FROM contrat_fm INNER JOIN histo_contrat_fm ON (histo_contrat_fm.`Num_Contrat_FM` = contrat_fm.Num_Contrat_FM) AND (histo_contrat_fm.`Id_Ets` = contrat_fm.`Id_Ets`) INNER JOIN entreprise ON (entreprise.`Id_Ets` = contrat_fm.`Id_Ets`) INNER JOIN site ON (site.`Num_Contrat_FM` = contrat_fm.Num_Contrat_FM) AND (site.`Id_Ets` = contrat_fm.`Id_Ets`) WHERE histo_contrat_fm.`Num_Produit` = '$Num_Produit' AND contrat_fm.`Id_Ets` = '$Id_Ets' AND contrat_fm.`Num_Contrat_FM` = '$Num_Contrat_FM' AND (histo_contrat_fm.`Num_Motif_Resiliation_Produit` is null) GROUP BY histo_contrat_fm.Num_Produit, contrat_fm.Id_Ets, contrat_fm.Num_Contrat_FM ORDER BY histo_contrat_fm.Num_Produit, contrat_fm.Id_Ets, contrat_fm.Num_Contrat_FM"; $resultats=$conn->query($sql); //affiche les informations while($row = $resultats->fetch()){ var_dump($row); echo '<BR/>'; echo '<BR/>'; echo '<BR/>'; }//FIN WHILE }//FIN DE LA BOUCLE }FIN DE FOREACH
Le résultat sur mon ordi j'obtiens bien 2 résultats, sur le serveur 1 seul.

Le souci c'est que je n'ai pas de message d'erreur côté serveur.

J'ai eu le même résultat avec setFetchMode(PDO::FETCH_ASSOC), setFetchMode(PDO::FETCH_OBJ), j'ai essayé en réalisant une requête préparée et j'en passe...

Si quelqu'un à une idée je suis preneur, merci d'avance.

ViPHP
AB
ViPHP | 5818 Messages

19 août 2010, 15:27

A tout hasard, vérifie le nom de tes champs/tables. Un serveur peut-être insensible à la casse et l'autre oui. Et peut être que sur le serveur distant les erreurs sont désactivées ...

Petit nouveau ! | 7 Messages

19 août 2010, 15:54

Bien, il faut toujours se remettre en cause.

A priori, cela fonctionne. c'est peut être aussi un peu plus propre. Mais tout s'améliore...

Code : Tout sélectionner

<?php require_once ("connexion.php"); class contrat { public $Num_Produit; public $Id_Ets; public $Num_Contrat_FM; public $dateduj; function __CONSTRUCT($Num_Produit,$Id_Ets,$Num_Contrat_FM,$dateduj) { $this->Num_Produit = $Num_Produit; $this->Id_Ets = $Id_Ets; $this->Num_Contrat_FM = $Num_Contrat_FM; $this->dateduj = $dateduj; } function setListeContrat(){ $sql = "SELECT YEAR(DATE_ADD((DATE_ADD(contrat_fm.`Date_Anniversaire`, INTERVAL (ROUND(DATEDIFF('$this->dateduj',contrat_fm.`Date_Anniversaire`)/365)*1)YEAR)), INTERVAL -17 MONTH)) AS `YEARold`, MONTH(DATE_ADD((DATE_ADD(contrat_fm.`Date_Anniversaire`, INTERVAL (ROUND(DATEDIFF('$this->dateduj',contrat_fm.`Date_Anniversaire`)/365)*1)YEAR)), INTERVAL -17 MONTH)) AS `MONTHold`, YEAR(DATE_ADD((DATE_ADD(contrat_fm.`Date_Anniversaire`, INTERVAL (ROUND(DATEDIFF('$this->dateduj',contrat_fm.`Date_Anniversaire`)/365)*1)YEAR)), INTERVAL -5 MONTH)) AS `YEARnew`, MONTH(DATE_ADD((DATE_ADD(contrat_fm.`Date_Anniversaire`, INTERVAL (ROUND(DATEDIFF('$this->dateduj',contrat_fm.`Date_Anniversaire`)/365)*1)YEAR)), INTERVAL -5 MONTH)) AS `MONTHnew`, IF ( CURDATE() < (DATE_ADD(DATE_ADD(contrat_fm.Date_Anniversaire, INTERVAL 12 MONTH),INTERVAL -1 DAY)),contrat_fm.Date_Indice_An,NULL)AS `ANactu`, contrat_fm.Num_Contrat_FM, contrat_fm.Id_Ets, histo_contrat_fm.Num_Produit, histo_contrat_fm.Num_Motif_Resiliation_Produit FROM contrat_fm INNER JOIN histo_contrat_fm ON (histo_contrat_fm.`Num_Contrat_FM` = contrat_fm.Num_Contrat_FM) AND (histo_contrat_fm.`Id_Ets` = contrat_fm.`Id_Ets`) INNER JOIN entreprise ON (entreprise.`Id_Ets` = contrat_fm.`Id_Ets`) INNER JOIN site ON (site.`Num_Contrat_FM` = contrat_fm.Num_Contrat_FM) AND (site.`Id_Ets` = contrat_fm.`Id_Ets`) WHERE histo_contrat_fm.`Num_Produit` = '$this->Num_Produit' AND contrat_fm.`Id_Ets` = '$this->Id_Ets' AND contrat_fm.`Num_Contrat_FM` = '$this->Num_Contrat_FM' AND (histo_contrat_fm.`Num_Motif_Resiliation_Produit` is null) GROUP BY histo_contrat_fm.Num_Produit, contrat_fm.Id_Ets, contrat_fm.Num_Contrat_FM ORDER BY histo_contrat_fm.Num_Produit, contrat_fm.Id_Ets, contrat_fm.Num_Contrat_FM"; return sqlToArray($sql); } function sqlToArray($sql) { Global $connexion; $resultats=$conn->query($sql); $resultats->setFetchMode(PDO::FETCH_OBJ); return $resultats; } } $tab5[] =array(array( "dateduj"=>"2010-09-01", "Num_Contrat_FM"=>"8", "Num_Produit"=>"57", "Id_Ets"=>"6"),array( "dateduj"=>"2010-09-01", "Num_Contrat_FM"=>"7", "Num_Produit"=>"296", "Id_Ets"=>"6") ); for ($i=0; $i<2; $i++){ $dateduj = $tab5[0][$i]["dateduj"]; $Num_Contrat_FM = $tab5[0][$i]["Num_Contrat_FM"]; $Num_Produit = $tab5[0][$i]["Num_Produit"]; $Id_Ets = $tab5[0][$i]["Id_Ets"]; $liste = new contrat($Num_Produit,$Id_Ets,$Num_Contrat_FM,$dateduj); var_dump($liste); echo '<BR/>'; echo '<BR/>'; echo '<BR/>'; }
désolé, j'ai pas remis en page et commenté.

Mais je reste à l'écoute de vos remarques. merci

ViPHP
AB
ViPHP | 5818 Messages

19 août 2010, 16:46

Ben si ça fonctionne partout alors c'est ok ?

Sinon juste une remarque : faire global $connexion c'est pas beau surtout pour une connexion. ça serait mieux de faire une classe de connexion statique que tu pourrais appeler de partout en faisant par exemple ConnectBDD::instance()