Probleme POO et Création de models et la PDO

Par Assassins, il y a 13 ans


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, il y a 13 ans

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() );
RedaElkhayat, il y a 13 ans

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();
?>