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

JVL
Eléphant du PHP | 76 Messages

31 oct. 2013, 15:43

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.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

31 oct. 2013, 20:27

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

@+
Il en faut peu pour être heureux ......

JVL
Eléphant du PHP | 76 Messages

04 nov. 2013, 16:11

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.

ViPHP
ViPHP | 2577 Messages

04 nov. 2013, 17:03

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.

JVL
Eléphant du PHP | 76 Messages

04 nov. 2013, 17:16

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 !