Classes database

Eléphant du PHP | 55 Messages

02 févr. 2011, 00:31

Bonjour,

Je me crée une classe qui devrait me permettre de créer des requête plus facilement et j'aimerais savoir si ma méthode est correcte.
Voici mon code:
class DB
 {

        protected $select;


			public function __toString()
			{
				$this->tostring  = "<p><b><u>Cette classe permet la création de requêtes (SELECT, UPDATE, DELETE).</u></b></p>";
				$this->tostring .= "<p>Utilisation.</p>";
				$this->tostring .= "<li>SELECT</li>";
				$this->tostring .= "<ul><li><b>db_select</b>(debug, champs, table, where, and, group, order) : appel la fonction</li>";
				$this->tostring .= "<li><b>debug :</b> == false 'permet d'afficher la requête</li>";
				$this->tostring .= "<li><b>champs :</b> indique les champs à utiliser</li>";
				$this->tostring .= "<li><b>table :</b> indique la table à utiliser</li>";
				$this->tostring .= "<li><b>where :</b> permet d'indiquer une condition</li>";
				$this->tostring .= "<li><b>and :</b> permet d'indiquer une condition</li>";
				$this->tostring .= "<li><b>group :</b>GROUP BY</li>";
				$this->tostring .= "<li><b>order :</b>ORDER BY</li></ul>";


				return $this->tostring;
			}


			public function db_select($debug, $champs, $table, $where, $and, $group, $order)
			{

				$this->table = $table;                                //- Choix de la table.
				$this->champ = $champs;                               //- Choix des champs de la table.
				$this->where = (( $where === true) ? NULL : $where ); //- En cas de clause WHERE.
				$this->and   = (( $and   === true) ? NULL : $and );   //- En cas de clause AND.
				$this->group = (( $group === true) ? NULL : $group ); //- En cas de GROUP BY.
				$this->order = (( $order === true) ? NULL : $order ); //- En cas de ORDER BY.

				$stmt = SPDO::getInstance()->prepare("SELECT
				                                       $this->champ
				                                    FROM
				                                       $this->table
				                                    $this->where
				                                    $this->and
				                                    $this->group
				                                    $this->order");

	            $stmt->execute();
	            $this->select = $stmt->fetchAll(PDO::FETCH_OBJ);

                //************DEBUG**************//
                //**Paramètre qui permet d'afficher la requête**//
                $this->debug =  (($debug === false) ?  $stmt->debugDumpParams() : null );

                echo $this->debug;
			}



			public function getSelect()
			{
				return $this->select;
			}

 }
Elle fonctionne correctement mais je ne suis pas certain que la méthode soit bonne
D'avance merci de vos remarques

@+ :)
8-)
http://lilou141203.labrute.com : merci de vous battre contre ma p'tite brute! :P

ViPHP
xTG
ViPHP | 7331 Messages

02 févr. 2011, 00:43

Rien que le fait de ne pouvoir faire que des requêtes préparés n'est pas bon. :)
On ne fait pas ce genre de requête pour tout et n'importe quoi.
Une requête du genre :
SELECT id FROM maTable
ne devrait pas être préparée car elle ne possède aucun paramètre.

Eléphant du PHP | 55 Messages

02 févr. 2011, 00:59

Oui effectivement
public function db_select($debug, $champs, $table, $where, $and, $group, $order)
			{

				$this->table = $table;                                //- Choix de la table.
				$this->champ = $champs;                               //- Choix des champs de la table.
				$this->where = (( $where === true) ? NULL : $where ); //- En cas de clause WHERE.
				$this->and   = (( $and   === true) ? NULL : $and );   //- En cas de clause AND.
				$this->group = (( $group === true) ? NULL : $group ); //- En cas de GROUP BY.
				$this->order = (( $order === true) ? NULL : $order ); //- En cas de ORDER BY.


				if($this->where === null)
				{
					$stmt = SPDO::getInstance()->query("SELECT
				                                       		$this->champ
					                                    FROM
					                                        $this->table
					                                    $this->group
					                                    $this->order");
				}
				else
				{
					$stmt = SPDO::getInstance()->prepare("SELECT
					                                         $this->champ
					                                      FROM
					                                         $this->table
					                                      $this->where
					                                      $this->and
					                                      $this->group
					                                      $this->order");

	            }

	            $stmt->execute();
	            $this->select = $stmt->fetchAll(PDO::FETCH_OBJ);

                //************DEBUG**************//
                //**Paramètre qui permet d'afficher la requête**//
                $this->debug =  (($debug === false) ?  $stmt->debugDumpParams() : null );

                echo $this->debug;
			}
8-)
http://lilou141203.labrute.com : merci de vous battre contre ma p'tite brute! :P

devlop78
Invité n'ayant pas de compte PHPfrance

02 févr. 2011, 21:20

Un jour j'ai créé une classe de gestion de requêtes. Pas tout à fait comme ça. En fait, je travaillais sous mysqli, et j'ai tout simplement créer un ... PDO. Depuis, j'utilise PDO ;)

PDO est suffisamment riche pour ne pas nécessiter de le faire ce genre de méthodes (très restrictive). Toutefois, on peut l'étendre pour y ajouter quelques fonctionnalités (par exemple récupérer toutes les lignes dans un tableau pour l'envoyer à la vue).

Par contre, il est très intéressant (voire important) de regrouper tous les codes modèles dans des classes. Une idée est de faire une classe par table. Ainsi, toutes les requêtes sur une table sont regroupées dans une table, ainsi lors d'un changement de la structure de la table, on a pas besoin de courir après les requêtes. Après, quezako des requêtes avec jointures, ça reste à voir. En tout cas, regrouper les codes modèles est aussi important que regrouper les codes vues. C'est un début de respect de la POO et une bonne introduction au MVC ;)

Eléphant du PHP | 55 Messages

03 févr. 2011, 08:41

Merci
8-)
http://lilou141203.labrute.com : merci de vous battre contre ma p'tite brute! :P