Bonjour,
J'ai repris le tutoriel sur comment créer un tutoriel ( http://www.grafikart.fr/tutoriels/php/calendrier-php-157 ) et il m'indique cette erreur : Fatal error: Call to a member function fetch() on a non-object in xxxxx on line 14.
Logiquement ayant repris le code source disponible seulement aux comptes premium je n'aurais pas dû avoir d'erreur mais je ne trouve pas du tout là...
J'ai vérifié mes logs, ma requete marche correctement...

Quelqu'un peut m'aider? :)

10 réponses


Donne nous un peu de code car sans code la seul chose que je peux te dire c'est que l'erreur indique qu'il connaît pas la fonction fetch que tu demande à la ligne 14

Falcorr
Auteur
function getEvents($year){
        global $DB;
        $req = $DB->query('SELECT id,title,date FROM events WHERE YEAR(date)='.$year);
        $r = array();
        /**
         * Ce que je veux $r[TIMESTAMP][id] = title
         */
        while($d = $req->fetch(PDO::FETCH_OBJ)){
            $r[strtotime($d->date)]$d->id] = $d->title;
        }
        return $r;
    }

La ligne 14 c'est la ligne du while.

Et voici la config:

<?php
try{
    $DB = new PDO('mysql:host=localhost:8080;dbname=gestion_budget','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
}
catch(PDOException $e){
    echo 'Base de donnée en vacance';
    exit();
}
?>

Bizarre car ton code m'a l'air bon je suis désolé de ne pas pouvoir t'aider.

A mon avis cela vient de ton paramètre qui doit faire rater ta requête.
Essaye de mettre en dur une date dans ta requête pour tester.

Salut,
Essaye comme ça pour voir $req = $DB->query('SELECT id,title,date FROM events WHERE YEAR(date)="'.$year.'"');

Tu peux également tester avec un try catch et voir l'exception qu'il te sort

Falcorr
Auteur

Bonjour,
J'ai testé la requête comme tu me l'as conseillé. Sans succès.
Ensuite, le try catch sur la requête n'a rien changé. Sûrement car il n'a pas besoin de passer par le catch car la requête marche très bien... J'essayes de voir dans les configurations de php.ini, j'ai dé commenté les lignes pdo, sans succès non plus... Je me prend la tête avec un collègue là, pas moyen de trouver l'erreur!!!

Falcorr
Auteur

Au final un collègue à moi a testé le code, il marche nickel, juste ce P***** de Easyphp qui ne marche pas, car chez lui sur WampServer ça marche très bien...

Essais de déclarer $DB dans la fonction (avec un require par exemple)

J'ai le même problème, si quelqu'un a trouvé la solution, qu'il me signale pleaz !

Salut,
voilà la solution.

function getEvents($year){
        global $DB;
        $query = 'SELECT id,title,date FROM events WHERE YEAR(date)='.$year;
        $r = array();
        /**
         * Ce que je veux $r[TIMESTAMP][id] = title
         */
        while($d = $DB->query($query)){
            $r[strtotime($d->date)]$d->id] = $d->title;
        }
        return $r;
    }

selon le manuel : PDO::query — Exécute une requête SQL, retourne un jeu de résultats en tant qu'objet PDOStatement.
Bonne chance.