Model sql avec mysqli

Description

Bonjour à tous,

Voici un exemple d'utilisation un peu différent de se que l'on à l'habitude de voir, dans la gestion mysql.
Cet source est base sur un tuto de Grafikart http://www.grafikart.fr/tutoriels/poo-models-php-90
/*
Dans ce tutoriel vidéo vous apprendrez à utiliser la Programmation Orienté Objet en PHP pour créer des "models". Ces objets vous permettront de communiquer plus facilement avec votre base de donnée à travers des fonction de sauvegarde, de suppression et de lecture.
  • /

Tuto codé avec l'extension "mysql"

J'ai changer l'extension "mysql" en "mysqli"
Et j'ai apporté quelques améliorations sur le code lui même

J'ai fait un exemple simple pour chaque fonction.
Je n'est pas fourni les vérifications de formulaire etc, sa sera à vous de le faire si vous voulez réutilisé se script.

Actuellement la class model contient :
Une lecture d'un enregistrement
Une lecture de plusieurs enregistrements
Une vérification d'existance de l'enregistrement choisi
Une insertion d'enregistrement
Une modification d'enregistrement
Une suppression d'enregistrement

Source / Exemple :


<?php
class Model {

//Déclaration des attributs public
	public $cnx;
	public $table;
	public $id;
	public $rep_sql;
//Déclaration des attributs private de connec
	private $_hote = "localhost";
	private $_identifiant = "root";
	private $_mot_de_passe = "";
	private $base_de_donnees = "coeur_of_prog";
	private $port = 3306;//default : 3306
	
/*//////////////////////////////////////////////////////////////////////////////////////////////////////////
Constructeur de connexion bdd
//////////////////////////////////////////////////////////////////////////////////////////////////////////*/	
function __construct() {
	
	//Déclenchement de la connexion
	//echo 'Constructeur déclenché !';
	$this->cnx = new mysqli(
		$this->_hote,$this->_identifiant,
		$this->_mot_de_passe,$this->base_de_donnees,
		$this->port
				); 
        if (mysqli_connect_errno()) {
            echo '<div class="admin-no">Échec de la connexion : '.mysqli_connect_error().'</div>';
            exit();
        }

 }
/*/////////////////////////////////////////////////////////////////////////////////////////////////////
Chargement du model
///////////////////////////////////////////////////////////////////////////////////////////////////*/ 		
static function load($name){
	
	require("$name.php");
	return new $name();

}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Existance de l'id
/////////////////////////////////////////////////////////////////////////////////////////////*/
public function existance($id) {
	
	if (!empty($id) && is_numeric($id)) {
		$sql = 'SELECT id FROM '.$this->table.' WHERE id='.$id;
		if($this->cnx){	
			if($req = $this->cnx->query($sql)) {
				//On verifie si l'id existe dans la table RETURN TRUE OU FALSE
				if ($req->num_rows != 0) { return TRUE; } else { return FALSE; }
			} else {
				//return $this->rep_sql = 1;
				echo '<div class="admin-no">Requête concernée : "',$query,'"</div>';
				//$mess_erreur_requete
				exit();
			}
		} else {
			//return $this->rep_sql = 2;
			echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
			//$mess_erreur_connec_bdd
			exit();
		}
	} else {
		//return $this->rep_sql = 3;
		echo '<div class="admin-no">Votre demande n\'est pas valide</div>';
		//$mess_erreur_existance
		exit();
	}
		
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Lecture
/////////////////////////////////////////////////////////////////////////////////////////////*/ 	
public function read($fields=null) {
		
	if($fields==null){ $fields = "*"; }//si les champs sont null je select tt
		$sql = 'SELECT '.$fields.' FROM '.$this->table.' WHERE id='.$this->id;
		if($this->cnx){	
			if($req = $this->cnx->query($sql)) {
				if ($req->num_rows != 0) {//on verifie que la table n'est pas vide
					$data = $req->fetch_array();	
						foreach($data as $k=>$v){
							$this->$k = $v;
						}
					return $this->rep_sql = 1;//Affichage tbl
					//echo '<div class="admin-ok">Requête réussi</div>';
					$this->free_result();//on libere la memoire
				} else {
					return $this->rep_sql = 2;
					//echo '<div class="admin-no">Aucune informations</div>';
					//$mess_erreur_no_infos
					exit();
				}	
			} else {
				return $this->rep_sql = 3;
				//echo '<div class="admin-no">Requête concernée : "',$sql,'"</div>';
				//$mess_erreur_requete
				exit();
			}
		} else {
			return $this->rep_sql = 4;
			//echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
			//$mess_erreur_connec_bdd
			exit();
		}
		
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Affichage liste
$sql = 'SELECT '.$fields.' FROM '.$this->table.' WHERE '.$conditions.' ORDER BY '.$order.' '.$limit;
/////////////////////////////////////////////////////////////////////////////////////////////*/ 	
public function find($data=array()){		

	if(isset($data["conditions"]) && isset($data["fields"]) && isset($data["order"])) {
		$conditions = $data["conditions"];
		$fields = $data["fields"];
		$order = $data["order"];
	$sql = 'SELECT '.$fields.' FROM '.$this->table.' WHERE '.$conditions.' ORDER BY '.$order;	
	}
	if(isset($data["limit"])) { //si on fixe une limit
		$limit = "LIMIT ".$data["limit"];
	$sql .= ' '.$limit;	
	}
	if($this->cnx) {			
		if($req = $this->cnx->query($sql)) {
			if ($req->num_rows != 0) {//on verifie que la table n'est pas vide
				$d = array();
					while($data = $req->fetch_array()){
						$d[] = $data;
					}
				return $d;
				return $this->rep_sql = 1;//Affichage tbl
				//echo '<div class="admin-ok">Requête réussi</div>';
				$this->free_result();//on libere la memoire
			} else {
				return $this->rep_sql = 2;
				//$mess_erreur_no_infos
				exit();
			}	
		} else {
			return $this->rep_sql = 3;
			//echo '<div class="admin-no">Requête concernée : "',$sql,'"</div>';
			//$mess_erreur_requete
			exit();
		}
	} else {
		return $this->rep_sql = 4;
		//echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
		//$mess_erreur_connec_bdd
		exit();
			
	}
	
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Update
/////////////////////////////////////////////////////////////////////////////////////////////*/
public function update($data){
	
	//est-ce que c defini et est-ce que c different de vide
	if(isset($data['id']) && !empty($data['id']) && is_numeric($data['id'])){
	
		$sql ='UPDATE '.$this->table.' SET ';
		foreach($data as $k=>$v){
			if($k!='id'){
			$sql .= ''.$k.'="'.$v.'",'; 
			}
		}
		$sql = substr($sql,0,-1);
		$sql .= 'WHERE id='.$data['id'];
					
		if($this->cnx){		
			if($req = $this->cnx->query($sql)) {
				$this->id = $data['id'];//on recup l'id modif
				return $this->rep_sql = 1;
				//echo '<div class="admin-ok">Requête réussi</div>';
				//$mess_modif_reussi 
			} else {
				return $this->rep_sql = 2;
				//echo '<div class="admin-no">Requête concernée : "',$sql,'"</div>';
				//$mess_erreur_requete
				exit();
			}	
		} else {
			return $this->rep_sql = 3;
			//echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
			//$mess_erreur_connec_bdd
			exit();
		}
	}//if(isset($data['id']) && !empty($data['id']) && is_numeric($data['id'])){
		
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Insertion
/////////////////////////////////////////////////////////////////////////////////////////////*/
public function save($data){
	
	$sql = 'INSERT INTO '.$this->table.' (';
	//unset($data['id']); //Destruction de l'id
	foreach($data as $k=>$v){
		$sql .= ''.$k.','; 
	}
		$sql = substr($sql,0,-1);
		$sql .= ') VALUES (';
	foreach($data as $v){
		$sql .= '"'.$v.'",';
	}
		$sql = substr($sql,0,-1);
		$sql .= ')';	
		   		
	if($this->cnx){		
		if($req = $this->cnx->query($sql)) {
			$this->id = $this->cnx->insert_id;//on recup l'id inserer
			return $this->rep_sql = 1;
			//echo '<div class="admin-ok">Requête réussi</div>';
			//$mess_insert_reussi
		} else {
			return $this->rep_sql = 2;
			//echo '<div class="admin-no">Requête concernée : "',$sql,'"</div>';
			//$mess_erreur_requete
			exit();
		}	
	} else {
		return $this->rep_sql = 3;
		//echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
		//$mess_erreur_connec_bdd
		exit();
	}		
		
}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Suppression
/////////////////////////////////////////////////////////////////////////////////////////////*/ 	
public function del($id){
	
	if($this->cnx){
		if ($this->existance($id) == TRUE) {	
			$sql = 'DELETE FROM '.$this->table.' WHERE id='.$id;
			if($req = $this->cnx->query($sql)) {
				return $this->rep_sql = 1;
				//echo '<div class="admin-ok">Requête réussi</div>';
				//$mess_suppr_reussi
			} else {
				return $this->rep_sql = 2;
				//echo '<div class="admin-no">Requête concernée : "',$sql,'"</div>';
				//$mess_erreur_requete
				exit();
			}
		} else {
			return $this->rep_sql = 3;
			//echo '<div class="admin-no">ID n\'existe pas ou plus</div>';
			//$mess_erreur_existance
			exit();
		}		
	} else {
		return $this->rep_sql = 4;
		//echo '<div class="admin-no">Erreur SQL n°',$this->errno,' : ',$this->error,'</div>';
		//$mess_erreur_connec_bdd
		exit();
	}

}
/*///////////////////////////////////////////////////////////////////////////////////////////////
Destructeur de connexion bdd
/////////////////////////////////////////////////////////////////////////////////////////////*/ 
function __destruct() {
	
	//Déclenchement de la deconnexion
	//echo "Destructeur déclenché !";
	$this->cnx->close();
	 
}			
}//class Model {
?>

Conclusion :


Pour l'installation :

Dans le fichier "model/model.php" en haut les informations de connec à la bdd
Un exemple de la base est disponible dans le fichier "base_coeur_of_prog.sql"
BDD => coeur_of_prog

Voila j'attends vos commentaires sur l'utilisation de cet technique.
Et sur la façon dont celle ci est codé.

PS : Pensez à activé l'extension "Mysqli"

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.