| 
<?php
#########################################################################################################
 //////////////////////////////////                /************************************************/        #
 //       #              #        //                /*     *****   class par Xavier Artot alias x@v */        #
 //       #             ##        //                /*     *****   [email protected] ****************/        #
 //       ###        #####        //                /*     *****   cette classe permet d'avoir une **/        #
 //       # ###    #######        //                /*     *****   **********************************/        #
 //            ########  #        //                /*     *****   couche d'abstraction avec ********/        #
 //           #######            //                /*     *****   sécuriation en utilisant *********/        #
 //       # #########            //                /*     *****    des requêtes préparés ***********/        #
 //       ######     ### #        //                /*     *****   et des tranctions auto-commit*****/        #
 //       ###          ###        //                /*     ******************************************/        #
 //       #              #        //                /*     ******************************************/        #
 //          ###                    //                /*     ******************************************/        #
 //        #######    ##            //                /*     ******************************************/        #
 //       #########  ####        //                /************************************************/        #
 //       ##     ##   # ##        //                                                                        #
 //       #      ##      #        //                                                                        #
 //       ##     #      ##        //                                                                        #
 //       ###############        //                                                                        #
 //       ##############            //                                                                        #
 //       #                        //                                                                        #
 //                                //                                                                        #
 //                      #        //                                                                        #
 //                    ###        //                                                                        #
 //                #######        //                                                                        #
 //             ##########        //                                                                        #
 //        ##########            //                                                                        #
 //       ########                //                                                                        #
 //           ###                //                                                                        #
 //               ####   #        //                                                                        #
 //                   ####        //                                                                        #
 //                      #        //                                                                        #
 //////////////////////////////////                                                                        #
 #########################################################################################################
 require_once('message.class.php');
 class Connection extends PDO
 {
 private $db = 'boutique';         // base de données
 private $host = 'localhost';     // adresse de la base
 private $user = 'root';         // nom
 private $pwd = '';                 // mot de passe
 private $con;                    //
 private $select;                 // requette de séléction
 private $execute;                 // requette d'execution
 private $email='[email protected]';                    // email de l'admin du site
 private $dns;
 
 public function __construct ()
 {
 try
 {
 $this->con = parent::__construct($this->getDns(), $this->user, $this->pwd);
 // pour mysql on active le cache de requête
 if($this->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql')
 $this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
 return $this->con;
 }
 catch(PDOException $e) {
 //On indique par email qu'on n'a plus de connection disponible
 error_log(date('D/m/y').' à '.date("H:i:s").' : '.$e->getMessage(), 1, $this->email);
 $message= new Message();
 $message->outPut('Erreur 500', 'Serveur de BDD indisponible, nous nous excusons de la gêne occasionnée');
 }
 }
 
 public function select($reqSelect)
 {
 try
 {
 $this->con = parent::beginTransaction();
 //$result= parent::query($reqSelect);
 $result = parent::prepare($reqSelect);
 $result->execute();
 $this->con = parent::commit();
 // ou
 // $this->con = parent::rollBack();
 return $result;
 }
 catch (Exception $e)
 {
 //On indique par email que la requête n'a pas fonctionné.
 error_log(date('D/m/y').' à '.date("H:i:s").' : '.$e->getMessage(), 1, '[email protected]');
 $this->con =parent::rollBack();
 $message= new Message();
 $message->outPut('Erreur dans la requêtte', 'Votre requête a été abandonné');
 }
 }
 
 // renvoie un tableau que l'on peux travailler avec count($result)...
 public function selectTableau($reqSelect)
 {
 $result = parent::prepare($reqSelect);
 $result->execute();
 /* Récupération de toutes les lignes d'un jeu de résultats "équivalent à mysql_num_row() " */
 $resultat = $result->fetchAll();
 return $resultat;
 }
 
 // on change le type de base ici
 public function getDns()
 {
 return 'mysql:dbname='.$this->db.';host='.$this->host;
 }
 }
 
 // * SIMPLE EXEMPLE *
 ////////////////////////////////////////////
 $connection = new Connection();
 $sql="SELECT * FROM categorie";
 $result= $connection->select($sql);
 foreach ($result as $row)
 {
 echo $row['description'].'<br>';
 }
 ////////////////////////////////////////////
 // * COUNT RESULT EXEMPLE *
 $sql="SELECT id_categorie FROM produits WHERE id_categorie='$id'";
 $result = $connection->selectTableau($sql);
 if (count($result) == 1)
 echo count($result).' produit';
 elseif (count($result) > 0)
 echo count($result).' produits';
 else
 echo 'aucun produit';
 ?>
 |