Fatal error: Call to a member function fetch() on a non-object [Résolu/Fermé]

Signaler
Messages postés
356
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
26 avril 2015
-
 Elo -
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

Messages postés
1769
Date d'inscription
jeudi 20 décembre 2007
Statut
Membre
Dernière intervention
19 novembre 2016
245
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
356
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
26 avril 2015
1
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;
}
Messages postés
356
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
26 avril 2015
1
Je n'arrive pas a faire des bindValue lorsque j'ai plusieurs and dans le where...
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
75
$sql = 'SELECT DISTINCT jour_taches, titre_taches FROM calendrier c, taches t WHERE mois_taches=:mt AND annee_taches=:at AND c.id_taches = t.id_taches ORDER BY jour_taches';
$query = $pdo->prepare($sql);
$query->execute(array(':mt'=>$mois, ':at'=>$annee));

Marche completement, et c'est sécurisé et tout à fait propre !
Messages postés
356
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
26 avril 2015
1
Merci !
Messages postés
356
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
26 avril 2015
1
J'ai un soucis :

$proprietaire=($_SESSION['username']);
$result = array();
$sql = 'SELECT DISTINCT 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 t.proprietaire='.$proprietaire.' ORDER BY jour_taches';
$query = $pdo->prepare($sql);
$query->execute();


il me met :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'jordan' in 'where clause'' in..


alors que dans ma bd, le champs proprietaire ya bien jordan...
$sql = 'SELECT DISTINCT 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 t.proprietaire=" '.$proprietaire.' " ORDER BY jour_taches';

car $propriétaire est une chaine, sinon il croit qu'il faut chercher la colonne jordan dans ta table
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
75
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 ;-)
Messages postés
356
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
26 avril 2015
1
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...
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
75
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
Messages postés
356
Date d'inscription
jeudi 15 avril 2010
Statut
Membre
Dernière intervention
26 avril 2015
1
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...
Messages postés
1226
Date d'inscription
lundi 28 mars 2011
Statut
Membre
Dernière intervention
2 septembre 2013
75
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"