Rev 61 | Rev 89 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?phpabstract class aGttSql {/*** Attributs : */private $base_de_donnees = GTT_BDD_NOM;protected $table_nom;protected $correspondance;/*** Accesseurs : */// Base De Donneesfunction getBaseDeDonnees(){return $this->base_de_donnees;}function setBaseDeDonnees($bdd){$this->base_de_donnees = $bdd;}// TableNomfunction getTableNom(){return $this->dao_table_nom;}function setTableNom($tn){$this->dao_table_nom = $tn;}// Correspondancefunction getCorrespondance($champ = null){if (!is_null($champ)) {return $this->dao_correspondance[$champ];}return $this->dao_correspondance;}function setCorrespondance($c){$this->dao_correspondance = $c;}/*** Méthodes : *//** Instancie un objet utilisateur à partir d'un enregistrement issu de la base de donnée ou l'inverse.* Cette métohode permet de s'abstraire des noms des champs présent dans la base de donnée.*/protected function basculerEnregistrementObjet($donnees, $instancier = false){$classe = get_class($this);if (is_array($donnees)) {if ($instancier) {foreach ($this->getCorrespondance() as $champ => $attribut) {if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {$methode = $this->donnerMethodeSetAvecAttribut($attribut);$this->$methode($donnees[$champ]);}}} else {$Objet = new $classe;foreach ($this->getCorrespondance() as $champ => $attribut) {if (isset($donnees[$champ]) && !is_null($donnees[$champ])) {$methode = $this->donnerMethodeSetAvecAttribut($attribut);$Objet->$methode($donnees[$champ]);}}return $Objet;}} else if ($donnees instanceof $classe) {$enregistrement = array();foreach ($this->getCorrespondance() as $champ => $attribut) {$methode = $this->donnerMethodeGetAvecAttribut($attribut);if (method_exists($donnees, $methode)) {if (!is_null($donnees->$methode())) {$enregistrement[$champ] = $donnees->$methode();}}}return $enregistrement;}}private function donnerMethodeGetAvecAttribut($attribut){return 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));}private function donnerMethodeGetAvecChamp($champ){return 'get'.str_replace(' ', '', ucwords(str_replace('_', ' ', $this->getCorrespondance($champ))));}private function donnerMethodeSetAvecAttribut($attribut){return 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $attribut)));}private function donnerMethodeSetAvecChamp($champ){return 'set'.str_replace(' ', '', ucwords(str_replace('_', ' ', $this->getCorrespondance($champ))));}/*** Ajouter un enregistrement dans la base de données.* @return true si ok, false si aucun enregistrement effectué*/public function ajouter(){$enregistrement = $this->basculerEnregistrementObjet($this);$sql_attributs = '';$sql_valeurs = '';foreach($enregistrement as $champ => $val) {if (!is_numeric($val)) {$val = '"'.$val.'"';}$sql_attributs .= $champ.', ';$sql_valeurs .= $val.', ';}$sql_attributs = trim($sql_attributs, ', ');$sql_valeurs = trim($sql_valeurs, ', ');$requete = 'INSERT INTO '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' '.'( '.$sql_attributs.' ) '.'VALUES '.'( '.$sql_valeurs.' )';trigger_error($requete, E_USER_NOTICE);$resultat = $GLOBALS['db']->query($requete);(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();if ($nbre_enregistrement_ajoute == 1) {return true;} elseif ($nbre_enregistrement_ajoute == 0) {return false;}}/*** Modifier un enregistrement dans la base de données.* @param object l'ancien objet contenant les valeurs de clés primaires non modifiées. Laissé vide si on ne modifie pas les clés.* @return true si ok, false si aucun enregistrement effectué.*/public function modifier($Ancien = null){$enregistrement = $this->basculerEnregistrementObjet($this);$sql_where = '';$sql_set = '';foreach($enregistrement as $champ => $val) {if (!is_numeric($val)) {$val = '"'.$val.'"';}$sql_set .= $champ.' = '.$val.', ';$classe = get_class($this);if ($Ancien instanceof $classe) {$methode = $this->donnerMethodeGetAvecChamp($champ);$val = $Ancien->$methode();if (!is_numeric($val)) {$val = '"'.$val.'"';}}if (preg_match('/_id_/', $champ)) {$sql_where .= $champ.' = '.$val.' AND ';}}$sql_set = trim($sql_set, ', ').' ';$sql_where = trim($sql_where, ' AND ').' ';$requete = 'UPDATE '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' SET '.$sql_set.'WHERE '.$sql_where;trigger_error($requete, E_USER_NOTICE);$resultat = $GLOBALS['db']->query($requete);(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;$nbre_enregistrement_ajoute = $GLOBALS['db']->affectedRows();if ($nbre_enregistrement_ajoute == 1) {return true;} elseif ($nbre_enregistrement_ajoute == 0) {return false;}}/*** Supprimer un enregistrement dans la base de données.* @return true si ok, false si aucun enregistrement effectué*/public function supprimer(){$enregistrement = $this->basculerEnregistrementObjet($this);$sql_where = '';foreach($enregistrement as $champ => $val) {if (!is_numeric($val)) {$val = '"'.$val.'"';}//if (preg_match('/_id_/', $champ)) {$sql_where .= $champ.' = '.$val.' AND ';//}}$sql_where = trim($sql_where, ' AND ').' ';$requete = 'DELETE FROM '.$this->getBaseDeDonnees().'.'.$this->getTableNom().' WHERE '.$sql_where ;trigger_error($requete, E_USER_NOTICE);$resultat = $GLOBALS['db']->query($requete);(DB::isError($resultat)) ? die (GestionnaireErreur::retournerErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : '' ;$nbre_enregistrement_suppr = $GLOBALS['db']->affectedRows();if ($nbre_enregistrement_suppr == 1) {return true;} elseif ($nbre_enregistrement_suppr == 0) {return false;}}}?>