Bonjour,

j'aurais besoin de votre avis sur ma manière de faire mes request avant d'aller plus loin.

voici comment j'ai imaginer ma class database, ma principal question est si c'est bien réaliser ?

mais c'est vraiment sur la fonction request que j'ai de l'insertitude, j'ai essayer d'être logique

<?php

namespace App;

use PDO;

class Database{

    private $dbname;
    private $dbuser;
    private $dbhost;
    private $dbpass;
    private $pdo;

    public function __construct()
    {
        require_once(RACINE. DS . 'lib' . DS .'config.php');
        $this->dbhost = DBHOST;
        $this->dbname = DBNAME; 
        $this->dbuser = DBUSER; 
        $this->dbpass = DBPSWD; 
    }

    protected function Getpdo() : PDO
    {
        if($this->pdo === null)
        {
            try
            {
                $pdo = new PDO("mysql:dbname={$this->dbname};host={$this->dbhost}",$this->dbuser,$this->dbpass,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4')); 
                $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $this->pdo = $pdo;
            }catch(\Exception $e){
                die('Imopsible de ce connecter a la BDD');
            }
        }
        return $this->pdo;
    }

    /**
     * thisPDO
     *
     * @return PDO
     */
    public function thisPDO(): PDO
    {
        return $this->Getpdo();
    }

    /**
     * Request
     *
     * @param  mixed $statement
     * @param  array $attrs
     * @param  int $one
     * @return mixed
     */
    public function Request(string $statement,?array $attrs=null,?int $one=null)
    {
        if(!is_null($attrs))
        {
            $req = $this->getPDO()->prepare($statement);
            $req->execute($attrs);
            if(!is_null($one)){
                //retour 1 result
                return $req->fetch();
            }else{
                //return all result
                return $req->fetchAll();
            }
        }else{
            $req = $this->getPDO()->query($statement);
            if(!is_null($one)){
                //retour 1 result
                return $req->fetch();
            }else{
                //return all result
                return $req->fetchAll();
            }
        }
        return null;
    }

}

et donc avec ce système une request aurais cette tronche là


    /**
     * @Tags affiche les tags lier a un topic
     *
     * @param  mixed $id
     * @return mixed
     */
    public function Tags($id)
    {
        return $this->cnx->Request("SELECT
        f_topic_tags.topic_id,
        f_topic_tags.tag_id,
            f_tags.id AS tagid,
            f_tags.name,
            f_tags.slug
        FROM f_topic_tags LEFT JOIN f_tags ON f_tags.id = f_topic_tags.tag_id WHERE topic_id = ? ORDER BY ordre",[intval($id)]);
    }

j'ai tester ça marche dans tout les cas mais il y a peut être plus propre je sais pas, avec ça j'ai tout un système de controller/renderer.

qu'en dites vous ? en vous remerciant.

Aucune réponse