Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/04/2011, 19h00   #1
Invité de passage
 
Inscription : octobre 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 3
Points : 0
Points : 0
Par défaut convertir une requete en objet

bonjour,
je débute en php5 et je souhaite résoudre un pb :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
<?php
 
include('spdo.php'); // classe de connexion
 
class SearchEngine
{
  public function search($conditions = array())  
  {
  $query = 'SELECT id FROM search'; // $query est une requete.
  if(sizeof($conditions) > 0)  // si la taille du tableau est > 0
  {
 
  $query.=' WHERE titre = '.implode(' AND titre = ',$conditions); // alors la requete integre le tableau sous forme de chaine.
  }
  // Execution de la requête SQL avec une classe PDO
 
 $result = SPDO::getInstance()->query($query); // on appelle la methode query( ma requete ) pour en faire un objet.
 
   $return = $result->fetchAll(PDO::FETCH_ASSOC);    // retourne un tableau contenant toutes les lignes du jeu d'enregistrements
  return $return;
  } 
 
  // -------- prog ------------------------------
  $mySearchEngine = new SearchEngine();
 
  $mySearchEngine->search(array('champ1' => "phpinfo", 'champ2' => "phpinfo"));
// ----------------------------------------------
En fait le but est de retourner les id selon des criteres de recherche (oui, c'est un moteur de recherche)
Mais le souci c'est l'erreur : Fatal error: Call to a member function fetchAll() on a non-object in C:\Program Files\EasyPHP 3.0\www\php2010\searchengine.php on line 30

Merci d'avance pour votre soutien ;-)
maksuha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 19h20   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
tu te connecte a quelle moment ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 20h28   #3
Invité de passage
 
Inscription : octobre 2009
Messages : 3
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 3
Points : 0
Points : 0
Par défaut re:

ben en fait la connexion se fait ds le fichier spdo.php dont voici le squelette :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
<?php
class SPDO
{  
 
private $PDOInstance = null;
private static $instance = null;
 
 
const DEFAULT_SQL_USER = 'root';
const DEFAULT_SQL_HOST = 'localhost';
const DEFAULT_SQL_PASS = 'mysql';
const DEFAULT_SQL_DTB = 'moteur_rech';
 
PDO::__construct()   */
public function __construct()
{
$this->PDOInstance = new PDO('mysql:dbname='.self::DEFAULT_SQL_DTB.';host='.self::DEFAULT_SQL_HOST,self::DEFAULT_SQL_USER ,self::DEFAULT_SQL_PASS);
}
 
 
public static function getInstance()
 {
// definition d'une fonction sur une classe, qui n'aura pas acces a $this, ni aux valeurs des variables d'instance,
// mais qui aura toujours acces aux variables statiques.
 
  if(is_null(self::$instance)) // Si l'attribut prive $instance est nul
{
  self::$instance = new SPDO();  // Alors $instance sera une instance de la classe SPDO
}
      return self::$instance; //  On retourne l'objet / l'instance de la classe SPDO.
      }
 
 
 
      public function query($query) // on execute une requete .
      {
        return $this->PDOInstance->query($query);
        }
        }
 
       /* foreach (SPDO::getInstance()->query('SELECT id FROM search') as $membre)  // Foreach permet de parcourir ici une table.
        {
           print_r ($membre); // Affiche des informations lisibles pour une variable
 
        }
        */
 
 
 
      ?>
Un peu long mais en gros il y a le constructeur, la fonction getInstance et celle pour la requete, rien de sorcier :-)
maksuha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 20h53   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
la tu ne montre que des classes, montre ton vrai code
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 14h52   #5
Membre chevronné
 
Homme
Développeur Web
Inscription : mars 2011
Messages : 399
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : Finance

Informations forums :
Inscription : mars 2011
Messages : 399
Points : 662
Points : 662
Restons zen et enquêtons :

Code :
1
2
$result = SPDO::getInstance()->query($query);  
$return = $result->fetchAll(PDO::FETCH_ASSOC);
L'erreur arrive sur la 2ème ligne et nous indique que $result n'est pas un objet.

Or, le manuel de PDO indique bien que la fonction query() ne retourne pas obligatoirement un objet PDOStatement

Il faudrait donc... vérifier la valeur de retour de $result
__________________
Membre de StackOverflow, je suis un fervant utilisateur de PHP et de jQuery.
Après des études de graphisme, j'ai décidé de mélanger développement web et web design. J'ai ainsi donc créé mon site web mais aussi plusieurs projets personnels.
Dans les plus aboutis, vous pourrez trouver dans mon labo et dans mon devblog, un raccourcisseur d'url, un bookmarklet pour envoyer l'url de la page actuelle vers votre email pour lire plus tard ou sauvegarder, mon générateur de template HTML5, etc...
Shikiryu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h19.


 
 
 
 
Partenaires

Hébergement Web