Bonsoir,
j'ai voulu faire le tutoriel "POO et Création de models", mais en utilisent la PDO le problème
lorsque j'affiche le résultat de la requête il m'affiche un tableau vide ( Array())
Voilà le code:

index.php

<?php
require_once('Core/Core.php');
$Lire = new Models();
$Lire->read();
echo "Titre = ".$Lire->titre;
echo '<br>';
$find = new Models();
$sql = array(
    "table" => "testemiam",
);
echo '<pre>';
print_r($sql);
echo '</pre>';
echo '<br>';
$tableau = $find->find($sql);
echo '<pre>';
var_dump($tableau);
echo '</pre>';
print_r($tableau);
?>

models.php

<?php
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 * Description of Models
 *
 * @author Julien
 */
class Models extends Bdd{

    private $dbbconnexion;
    public $table_Models;

    public function read(){
        $this->dbbconnexion = self::getInstance();
        $requete= $this->dbbconnexion->prepare("SELECT * FROM testemiam");
        $requete->execute();
        $resultat = $requete->fetch();
        foreach($resultat as $k=>$v) {
            $this->$k =$v; 
        }

    }
    public function save(){

    }
    public function find($data=array()){
        $this->dbbconnexion = self::getInstance();
        if(!isset($data"conditions"]))
        {
            $data"conditions"] = "1=1";
        }
        if(!isset($data"fields"]))
        {
            $data"fields"] = "*";
        }
        if(isset($data"limit"]))
        {
            $data"limit"] = "LIMIT ".$data"limit"];
        }
        else
        {
            $data"limit"] = "";
        }
        if(!isset($data"order"]))
        {
            $data"order"] = "id DESC";
        }
        if(isset($data"table"]))
        {
            $requete= $this->dbbconnexion->prepare("SELECT :fields FROM :table WHERE :conditions ORDER BY :order :limit");
            if($requete->execute($data) == false)
            {
                echo "Erreur l'envoie a echoue";
                echo "<br/>";
                echo $requete->errorInfo();
            }
            $d =array();
            while ($resultat = $requete->fetch())
            {
                $d] = $resultat;
            }
            return $d;
        }
        else
        {
            $data"table"] = $this->table_Models;
            $requete= $this->dbbconnexion->prepare("SELECT :fields FROM :table WHERE :conditions ORDER BY :order :limit"); 
            $requete->execute($data);
            $d =array();
            while ($resultat = $requete->fetch())
            {
                $d] = $resultat;
            }
            return $d;
        }

    }

    static function load($name){
        require_once("$name.php");
        return new $name();
    }
}
?>

Le résultat en image:

Merci d'avance.

3 réponses


RedaElkhayat
Réponse acceptée

Oui c'est normal,
parce que quand tu vient d'executer ta requête, la methode execute ajoute des '' autour de chaque element de ton tableau data
SELECT '*' FROM 'table' WHERE 'x=y' au lieu de SELECT * FROM table WHERE x='y'

essaies avec cette structure:

<?php
    $sql = 'SELECT ';
    if( isset( $data'fields'] ) ){
        $sql .= $data'fields']; 
    }else{
        // sinon
    }
    if( isset( $data'table'] ) ){
        $sql .= ' FROM '.$data'table'];
    }else{
        // sinon
    }
    if( isset( $data'conditions'] ) ){
        $sql .= ' WHERE '.$data'conditions'];
    }else{
        // sinon
    }
    if( isset( $data'order'] ) ){
        $sql .= ' ORDER BY'.$data'order'];
    }else{
        // sinon
    }
    if( isset( $data'limit'] ) ){
        $sql .= ' '.$data'limit'];
    }else{
        // sinon
    }

    $request = $pdo->prepare($sql);
    $request->execute();
?>

Bonsoir,
Dans ton fichier Models.php à la ligne 60 tu mets un echo d'une array ce qui ne va pas,
tu essaies avec :

var_dump( $requete->errorInfo() );

Maintenant il m'affiche cela : [url=http://img5.imageshack.us/img5/1745/probleme1.png][img]http://img5.imageshack.us/img5/1745/probleme1.png[/img][/url] Mais je ne vois pas ou et le problème dans ma requête.