Bonjour,
L'objectif de ta classe est de prendre en charge toutes les opérations d'interaction avec la base de données pour les rendre transparentes pour le programmeur. Selon ce principe l'utilisateur de la classe doit pouvoir ouvrir une connexion à une base de données dans le but de l'interroger, donc une seule connexion suffira par objet de ta classe et avec cette connexion on pourra en principe exécuter tout type de requêtes.
Si tu souhaites faire abstraction des requêtes SQL et proposer des méthodes qui simplifient leur usage ça sera une pure perte de temps car SQL est tellement bien conceptualisé que ses différentes combinaisons qui techniquement répondent aux requêtes utilisateurs sont inimitables sinon que du pure plagia. Le plus judicieux est créer des méthodes qui prennent en charge le traitement de l'exécution et la récupération des résultats d'exécution des requêtes SQL connues (SELECT, INSERT, UPDATE et DELETE) que l'utilisateur de la classe fournira texto.
Dans le cas du SELECT, l’intérêt d'une méthode d'exécution réside dans le fait que seule la classe ait accès à une connexion déjà ouverte, et que la méthode puisse gérer les erreurs inhérentes aux relations avec cette connexion. De plus, la méthode peut extraire les résultats d'exécution et les renvoyer à l'utilisateur de la classe dans un format séparé de la connexion comme par exemple : retourner les résultats dans un tableau. Ce qui reste exploitable facilement par l'utilisateur.
De ces spécifications ressort le modèle objet suivant qui redonne à ta classe une nouvelle organisation:
Programme de la classe et son test:
<?php
######################## Class de connexion #################################
class Connexion {
// propriétés
public $connexion, $db, $db_host, $db_user, $db_passwd, $db_name, $result, $mysqli;
// connect to the server & open default database
public function __construct($db_host='', $db_user='', $db_passwd='', $db_name='')
{
$this->db_host = $db_host;
$this->db_user = $db_user;
$this->db_passwd = $db_passwd;
$this->connexion = new mysqli($db_host, $db_user, $db_passwd); //HOST, USER, PASSWORD
if ($this->connexion->connect_error)
{
die('Error (' . $this->connexion->connect_errno . ') : '. $this->connexion->connect_error);
}
// set charset to utf-8
$this->connexion->set_charset("utf8");
// open default database if givven
if (trim($this->db_name)!='' && !$this->openDb($db_name))
{
die ('The '.$db_name.' does not exists');
}
} // end __construct
// select a databse
public function openDb($db_name)
{
//si pas de connexion, alors rien
if (!$this->connexion) return false;
//sinon ouvrir la base
$this->db_name = $db_name;
$this->db = $this->connexion->select_db($this->db_name);
if(!$this->db)
{
return false;
}
return true; // db opened
} // end db_name
// method: select, create, insert, delete, update, read (CRUD)
public function execSQL($sql)
{
//si pas de connexion, alors rien
if (!$this->connexion) return false;
// exécution SQL : 3 cas (1. erreur d'exécution, 2. résultat requêtes non SELECT, 3. résultat SELECT)
$result = $this->connexion->query($sql);
if ($result === FALSE) // cas d'erreur d'exécution
{
echo ('Error (' . $this->connexion->connect_errno . ') : '. $this->connexion->connect_error);
return false;
}
else if ($result === TRUE)// cas de toute requête non SELECT
{
return true;
}
else {
// cas du select
$tabl_result = array();
while ($result && $row = $this->connexion->fetch_object())
{
$tabl_result[] = $row;
}
return $tabl_result;
}
} // EnD execSQL
// fermer la connexion
public function close()
{
if ($this->connexion && $this->db) $this->connexion->close();
} // end close
// destructeur
public function __destruct() {
$this->close();
}
} // EnD class
######################## Class de connexion #################################
//////////// TEST de la classe ////////////////
// ouvrir la base de données TEST
$db_test = new Connexion('localhost', 'root', '', 'dbtest');
// exécuter des requêtes SELECT
$tabl_hMenu = $db_test->execSQL("SELECT * FROM hmenu WHERE location='r' AND onoff='1'");
if ($tabl_hMenu && is_array($tabl_hMenu))
{
echo 'Number of rows returned: ' . count($tabl_hMenu);
foreach($tabl_hMenu as $row_hMenu)
{
// on affiche les menus principales
echo '<div class="headMenu">'.$row_hMenu->hmenu_ar.'</div>';
// on affiche les sous menus du menu principale
$tabl_bMenu = $db_test->execSQL("SELECT * FROM bmenu WHERE id_hm1='".$row_hMenu->id_hm."' AND onoff='1'");
if ($tabl_bMenu && is_array($tabl_bMenu))
{
echo 'Number of rows returned: ' . count($tabl_bMenu);
echo '<ul class="ulMenus">';
foreach($tabl_bMenu as $row_bMenu)
{
echo '<li class="liMenus">'.$row_bMenu->bmenu_ar.'</li>';
} // fin boucle $tabl_bMenu
echo '</ul>';
}
} // fin boucle $tabl_hMenu
}
// fermer la base de données
$db_test->close();
?>