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

Résolu
jordxn Messages postés 356 Date d'inscription   Statut Membre Dernière intervention   -  
 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

gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
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   Statut Membre Dernière intervention   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;
}
0
gardiendelanuit Messages postés 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
Où est déclaré $pdo?
0
jordxn Messages postés 356 Date d'inscription   Statut Membre Dernière intervention   1
 
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 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
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   Statut Membre Dernière intervention   1
 
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 1770 Date d'inscription   Statut Membre Dernière intervention   264
 
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   Statut Membre Dernière intervention   79
 
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   Statut Membre Dernière intervention   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...
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
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   Statut Membre Dernière intervention   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...
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
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