Fatal error: Call to a member function fetch() on a non-object

Résolu/Fermé
jordxn Messages postés 356 Date d'inscription jeudi 15 avril 2010 Statut Membre Dernière intervention 26 avril 2015 - 24 avril 2013 à 21:04
 Elo - 6 mai 2013 à 10:21
Bonjour,
J'ai cette erreur dans cette partie de code :



Fatal error: Call to a member function fetch() on a non-object in ....
//au niveau du while.


function getEventsDate($mois, $annee) {
$result = array();
$sql = 'SELECT DISTINCT jour_taches, titre_taches FROM calendrier c, taches t WHERE mois_taches='.$mois.' AND annee_taches='.$annee.' AND c.id_taches = t.id_taches ORDER BY jour_taches';
if($sql)
{
}else{
die("Une requête a échouée.");
}
while ($row = $sql->fetch(PDO::FETCH_NUM)){
$result[] = $row[0];
$result[] = $row[1];
}
if($pdo){
$pdo = NULL;
}
return $result;
}

Merci de bien vouloir m'aider car je suis perdu

3 réponses

gardiendelanuit Messages postés 1769 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
Modifié par gardiendelanuit le 25/04/2013 à 15:27
Bonjour,

Tu appel une méthode PDO sur un string.. je ne vois nul par une ligne concernant ta BDD...

Ha et aussi met un titre plus explicite ;)

Merci de mettre "Résolu" quand le problème est réglé!
La connaissance c'est comme la confiture: moins on en a et plus on l'étale.
1
jordxn Messages postés 356 Date d'inscription jeudi 15 avril 2010 Statut Membre Dernière intervention 26 avril 2015 1
28 avril 2013 à 21:57
Bonjour,
j'ai maintenant la meme erreur a prepare() :



function getEventsDate($mois, $annee) {
$result = array();
$sql = 'SELECT DISTINCT jour_taches, titre_taches FROM calendrier c, taches t WHERE mois_taches='.$mois.' AND annee_taches='.$annee.' AND c.id_taches = t.id_taches ORDER BY jour_taches';
$query = $pdo->prepare($sql);
$query->execute();
if($query)
{
}else{
die("Une requête a échouée.");
}
while ($row = $query->fetch(PDO::FETCH_NUM)){
$result[] = $row[0];
$result[] = $row[1];
}
if($pdo){
$pdo = NULL;
}
return $result;
}

function afficheEvent($i, $event) {
$texte = ""; $suivant = false;

foreach($event as $cle => $element) {
if($suivant) {
$texte .= $element."<br/>";
}
if($element == $i) {
$suivant = true;
} else {
$suivant = false;
}
}

return $texte;
}
0
gardiendelanuit Messages postés 1769 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
29 avril 2013 à 12:18
Où est déclaré $pdo?
0
jordxn Messages postés 356 Date d'inscription jeudi 15 avril 2010 Statut Membre Dernière intervention 26 avril 2015 1
29 avril 2013 à 16:47
J'ai inclué le fichier config qui est :

<?php
// Connexion a la base de donnees
$host='**';
$database='**';
$user='**';
$password='**';

$strCon = "mysql:host=$host;dbname=$database";
$arrExtraParam= array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");
$pdo = new PDO($strCon, $user, $password, $arrExtraParam);
$pdo->exec("SET NAMES 'utf8'");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
0
gardiendelanuit Messages postés 1769 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
29 avril 2013 à 16:49
Dans ce cas :
global $pdo;
au début de ta fonction car la porté des variable global n'est pas la même comme en C/C++ ;)
0
jordxn Messages postés 356 Date d'inscription jeudi 15 avril 2010 Statut Membre Dernière intervention 26 avril 2015 1
29 avril 2013 à 16:51
function getEventsDate($mois, $annee) {
global $pdo;
$result = array();
$sql = 'SELECT DISTINCT jour_taches, titre_taches FROM calendrier c, taches t WHERE mois_taches='.$mois.' AND annee_taches='.$annee.' AND c.id_taches = t.id_taches ORDER BY jour_taches';
$query = $pdo->prepare($sql);
$query->execute();
if($query)
{
}else{
die("Une requête a échouée.");
}
while ($row = $query->fetch(PDO::FETCH_NUM)){
$result[] = $row[0];
$result[] = $row[1];
}
if($pdo){
$pdo = NULL;
}
return $result;
}

function afficheEvent($i, $event) {
$texte = ""; $suivant = false;

foreach($event as $cle => $element) {
if($suivant) {
$texte .= $element."<br/>";
}
if($element == $i) {
$suivant = true;
} else {
$suivant = false;
}
}

return $texte;
}

comme ceci ?

Merci
0
gardiendelanuit Messages postés 1769 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 19 novembre 2016 264
29 avril 2013 à 16:54
Dans le cas ou l'include est fait à l'extérieur de ta fonction oui, ca me semble juste.
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
29 avril 2013 à 20:14
Je t'ai mis juste avant comme faire pour ne pas incorporer des variables dans la requete, et tu me refais ca. Donc fais comme je t'ai montré avant ;-)
0
jordxn Messages postés 356 Date d'inscription jeudi 15 avril 2010 Statut Membre Dernière intervention 26 avril 2015 1
29 avril 2013 à 20:15
Je voudrais voir si sa marche déjà comme sa (car c'est la méthode la plus facile) même si c 'est pas sécurisé...
Comment ca se fait qu'il me dise sa comme erreur stp...
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
29 avril 2013 à 20:26
C'est pas plus facile, tu risques plus de faire une erreur de cote/double cote comme ca qu'en faisant un bindValue avec un tableau dans le execute. D'ailleurs c'est ton probleme ici
0
jordxn Messages postés 356 Date d'inscription jeudi 15 avril 2010 Statut Membre Dernière intervention 26 avril 2015 1
30 avril 2013 à 00:05
function getEventsDate($mois, $annee) {
global $pdo;
$proprietaire=($_SESSION['username']);
$result = array();
$query = $pdo->prepare('SELECT jour_taches, intitule, proprietaire FROM calendrier c join taches t on c.id_taches = t.id_taches WHERE mois_taches=:mois AND annee_taches=:annee AND proprietaire=:proprietaire ORDER BY jour_taches');
$query->bindParam(':mois',$mois);
$query->bindParam(':annee',$annee);
$query->bindParam(':proprietaire',$proprietaire,PDO::PARAM_STR);
$query->execute();


sa ne marche plus depuis que j'ai fait les bindparam...
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
Modifié par jeremy.s le 30/04/2013 à 15:47
A defaut si tu lui dit pas, il met des string. Donc si tes mois taches et annee taches sont des number, il faut mettre PDO::PARAM_INT
Et c'est pas pcq tu mets des bindValue qu'il faut zapé les " " !
WHERE proprietaire=":proprietaire"
0