Page 1 sur 1

PDO Call to a member function fetch() on a non-object

Posté : 31 oct. 2013, 15:43
par JVL
Bonjour à tous,

Je pense que c'est problème de concaténation. J'appel 2 fichiers en même temps que celui la, avec des requètes similaires et pas de soucis.
Désolé c'est un peut crade.

voila l'appel:
<FRAMESET COLS="36%,32%, 32%" FRAMEBORDER="NO">
<?php echo '<FRAME NAME="sommaire" SRC="tableau.php?yolo='.$_POST["yolo"].'&date1='.$_POST["date1"].'&date2='.$_POST["date2"].'&service='.$_POST["service"].'">';
 echo '<FRAME NAME="cadre1" SRC="rapportravail.php?yolo='.$_POST["yolo"].'&date1='.$_POST["date1"].'&date2='.$_POST["date2"].'&service='.$_POST["service"].'">' ; 
echo '<FRAME NAME="cadre1" SRC="graphe.php?yolo='.$_POST["yolo"].'&date1='.$_POST["date1"].'&date2='.$_POST["date2"].'&service='.$_POST["service"].'">' ; ?>
  </FRAMESET>
voila le début du code:
							try{
							try{
if($_GET["yolo"] == 0){

$format = "%d/%m/%Y"; 
$selectionr = $connection->query('SELECT DISTINCT (`Categorie_suivi`) as cat,SUM(`Duree_suivi`) as duree,
FROM `Glpi_suivi_travail`,
INNER JOIN glpi_users ON glpi_users.`name` = glpi_suivi_travail.`Name_suivi`,
INNER JOIN glpi_groups_users ON glpi_users.`id` = glpi_groups_users.`users_id`, 
WHERE (`Date_suivi` BETWEEN str_to_date(\''.$_GET["date1"].'\', \''.$format.'\') AND str_to_date(\''.$_GET["date2"].'\', \''.$format.'\')), 
AND  glpi_groups_users.`groups_id`= \''.$_GET["service"].'\', 
GROUP BY `cat`, ORDER BY `cat` ');

}
else{ 
$format = "%d/%m/%Y"; 
$selectionr = $connection->query('SELECT DISTINCT (`Categorie_suivi`) as cat, SUM(`Duree_suivi`) as duree
FROM `Glpi_suivi_travail` 
WHERE (`Date_suivi` BETWEEN str_to_date(\''.$_GET["date1"].'\', \''.$format.'\') AND str_to_date(\''.$_GET["date2"].'\', \''.$format.'\')) AND (`Name_suivi` = \''.$_GET["yolo"].'\'), GROUP BY `cat`, ORDER BY `cat`
');
	}                            }  catch (PDOException $e) {
								  echo 'Error : ' . $e->getMessage(); }     

$element=array(); 
$total=0;

//Parcourir le resultat de la requete et le mettre dans un tableau
while($row = $selectionr->fetch(PDO::FETCH_OBJ)){

    $element[$row->cat]=$row->duree;
    $total+=$row->duree;
} 

Voila l'erreur
Fatal error: Call to a member function fetch() on a non-object in C:\xampp\htdocs\glpi\front\graphe.php on line 32
l'erreur correspond a
$element[$row->cat]=$row->duree;
$total+=$row->duree;

Merci d'avance.

Re: PDO Call to a member function fetch() on a non-object

Posté : 31 oct. 2013, 20:27
par moogli
Modération :
Afin d'obtenir plus de réponses, le sujet a été déplacé dans un forum plus approprié.


Salut,

Vient du fetch dans le while (comme indiqué dans le message d'erreur, en plus il y a le numéro de ligne :mrgreen: ).

Cela veux dure que selectionr n'est pas un objet.
Et la je paris sur le fait que ce soit un booléen font la valeur est false 8-)

En clair ta requête se vautre et l'exécute retourne false.
C`est un cas a traiter

@+

Re: PDO Call to a member function fetch() on a non-object

Posté : 04 nov. 2013, 16:11
par JVL
Donc ma requète est fausse ...
SELECT DISTINCT `Categorie_suivi` , SUM( `Duree_suivi` ) AS duree
FROM `glpi_suivi_travail` me pro
INNER JOIN glpi_users ON glpi_users.`name` = glpi_suivi_travail.`Name_suivi` 
INNER JOIN glpi_groups_users ON glpi_users.`id` = glpi_groups_users.`users_id` 
WHERE `Date_suivi` 
BETWEEN '2013-10-15'
AND '2013-11-04'
AND glpi_groups_users.`groups_id` = '1402'
dans PhpmyAdmin la requete est bonne, mais je souhait comme réponse: 2 lignes, courant ou projet avec le nombre d'heure correspondant à l'interval définit. Mais dans phpmyadmin, cela me renvoi une seule ligne avec un cumul d'heure.

Re: PDO Call to a member function fetch() on a non-object

Posté : 04 nov. 2013, 17:03
par Mazarini
Il me semble qu'il faut supprimer DISTINCT (pas sur)
et ajouter GROUP BY `Categorie_suivi` à la fin

Sur le principe, toute colonne qui n'est pas utilisée dans une fonction de type sum(), count()... doit être dans le group by (si de tels functions sont utilisée). Mysql est permissif à ce niveau, mais d'autres sgbd refusent.

Re: PDO Call to a member function fetch() on a non-object

Posté : 04 nov. 2013, 17:16
par JVL
Il me semble qu'il faut supprimer DISTINCT (pas sur)
et ajouter GROUP BY `Categorie_suivi` à la fin

Sur le principe, toute colonne qui n'est pas utilisée dans une fonction de type sum(), count()... doit être dans le group by (si de tels functions sont utilisée). Mysql est permissif à ce niveau, mais d'autres sgbd refusent.

Yep merci beaucoup Mazarini !