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.