Class sql plutôt complète, avec une gestion des erreurs par fichier

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 600 fois - Téléchargée 27 fois

Contenu du snippet

Bonjour, alors voilà en fait c'est une class SQL toute bête, rien de bien aprticulier, à part peut-être la gestion des erreurs SQL par l'intermédiaire des fichiers, ce qu ipermet de garder un historique des problèmes SQL.

Source / Exemple :


<?php
//Script pour une class php4 avec gestion des erreus par fichier, nombre de requetes
class Mysql
{
	var $host = 'localhost';							//Valeur par défault du serveur
	var $user = 'cerfvice';								//Valeur par défault de l'utilisateur
	var $pass = 'eh2eeevu';								//Valeur par défault du mot de passe
	var $db = 'cerfvice_';								//Valeur par défault de la base de donnée
	
	var $aff_errors;									//Si true on affiche les erreurs, si false on ne les affiches pas
	var $save_errors;									//Si true on enregistre les erreurs, si false on ne les enregistre pas
	var $path_errors = './logs/errors_sql/';			//Contient le chemin relatif du dossier où sont stoqué les fichié d'érreurs SQL
	
	var $error;											//On initialise la variable $error qui contiendras les erreurs personnalisées
	var $nbr_query = 0;									//On initialise la variable $nbr_query à 0
	 
	function Mysql($serveur = false, $client = false, $password = false, $data_abse = false, $list_errors = true, $register_errors = true) //__construct
	{
		//On définis les variables servants à la gestion des erreurs:
		if ($list_errors)
			$this->aff_errors = true;
		else
			$this->aff_errors = false;
		if ($register_errors)
			$this->save_errors = true;
		else
			$this->save_errors = false;
		
		//On vérifie si l'utilisateur demande une configuration précise:
		if ($serveur)
			$this->host = $serveur;
		if ($client)
			$this->user = $client;
		if ($password)
			$this->pass = $password;
		if ($data_abse)
			$this->db = $data_abse;
		
		$this->Connect($this->host, $this->user, $this->pass);
		$this->Select_db($this->db);
	}
	
	function Connect($host, $user, $pass)
	{
		$infos = array($this->host, $this->user, $this->pass); //Array contenant le nom d'accès au serveur, le nom de l'utilisateur et le mot de passe pour la fonction Error qui gère les erreurs
		mysql_connect ($host, $user, $pass) or die($this->Error($infos, 'connect') );
	}
	
	function Select_db($db, $id = false)
	{
		if ($id)
			mysql_select_db ($db, $id) or die($this->Error($db, 'select_db') );
		else
			mysql_select_db ($db) or die($this->Error($db, 'select_db') );
	}
	
	function Close($id = false) //__destruct	/-/-/-/-/-/		Destructeur non mis en place, car c'est une class optimisé pour php4
	{
		if ($id)
			mysql_close ($id);
		else
			mysql_close ();
	}
	
	function Query($sql)
	{
		$query = mysql_query($sql) or die($this->Error($sql, 'query') );
		
		++$this->nbr_query;
		
		return $query;
	}
	
	function Fetch($req, $type = 'assoc')
	{
		switch ($type)
		{
			case 'row':
				$fetch = mysql_fetch_row ($req);
			break;
			
			case 'array':
				$fetch = mysql_fetch_array ($req);
			break;
			
			case 'assoc':
				$fetch = mysql_fetch_assoc ($req);
			break;
			
			case 'object':
				$fetch = mysql_fetch_object ($req);
			break;
		}
		return $fetch;
	}
	
	function Query_array($sql, $type = 'assoc')
	{
		$query = $this->Query ($sql);
		$array = $this->Fetch($query, $type);
		
		return $array;
	}
	
	function Query_array_plus($sql, $type = 'assoc')
	{
		$array = array();
		$query = $this->Query ($sql);
		while ($result = $this->Fetch($query, $type) )
			$array[] = $result;
		
		return $array;
	}
	
	function Error($infos, $type)
	{
		switch ($type)
		{
			case 'connect':
				$this->error = 'Nous ne pouvons pas vous connecter avec ces données:
							<br />
						  <span style=\'color: red;\'>Serveur: </span><span style=\'color: blue;\'>'. $infos[0] .'</span>
						    </br />
						  <span style=\'color: red;\'>Identifiant: </span><span style=\'color: blue;\'>'. $infos[1] .'</span>
						    </br />
						  <span style=\'color: red;\'>Mot de passe: </span><span style=\'color: blue;\'>'. $infos[2] .'</span>';
			break;
			
			case 'select_db':
				$this->error = 'Nous n\'avons pas pus vous connecter à la base de donnée:
						    </br />
						  <span style=\'color: red;\'>Base de donnée: </span><span style=\'color: blue;\'>'. $infos .'</span>';
			break;
			
			case 'query':
				$this->error = 'Il y à une erreur dans la requete.
						  	<br />
						  <span style=\'color: red;\'>Requete: </span><span style=\'color: blue;\'>'. $infos .'</span>
						  	<br />
						  <span style=\'color: red;\'>Erreur numéro: </span><span style=\'color: blue;\'>'. mysql_errno() .'</span>
						  	<br />
						  <span style=\'color: red;\'>Erreur MySQL: </span><span style=\'color: blue;\'>'. mysql_error() .'</span>';
			break;
				
		}
		
		if ($this->save_errors)
		{
			//On sauvegarde les erreurs dans un fichier:
			if (!scandir($this->path_errors . date('d-m-Y') ) ) //Si un dossier du jours actuel éxiste on le définis dans la variable contenant le chemin de destination du fichier d'erreurs
				mkdir ($this->path_errors . date('d-m-Y') );
			$this->path_errors .= date('d-m-Y') .'/';
			
			$file_error = fopen ($this->path_errors . date('H\h i\m\i\n s\s') .'.txt', 'w');
			if ($type == 'connect')
				fputs ($file_error, "-----------------------------------\r
ERREUR SQL DANS LE FICHIER:\r\n
http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ."\r
-----------------------------------
\r\n
Erreur lors de la connexion à MySQL:

Serveur:\r\n".
$infos[0] ."

Identifiant:\r\n".
$infos[1] ."

Mot de passe:\r\n".
$infos[2]
					 );
			elseif ($type == 'select_db')
				fputs ($file_error, "-----------------------------------\r
ERREUR SQL DANS LE FICHIER:\r\n
http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ."\r
-----------------------------------
\r\n
Erreur lors de la connexion à la base de donnée de nom:\r\n".
$infos
					 );
			elseif ($type == 'query')
			{
				$infos = preg_replace ('`:space:+|:blank:+`', ' ', $infos);
				fputs ($file_error, "-----------------------------------\r
ERREUR SQL DANS LE FICHIER:\r\n
http://". $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] ."\r
-----------------------------------
\r\n
Erreur dans la requete:\r\n".
trim($infos) ."

Erreur numéro:\r\n".
mysql_errno() ."

Erreur MySQL:\r\n".
mysql_error()
					 );
			}
			fclose ($file_error);
		}
		
		if ($this->aff_errors)
			echo $this->error;
	}
}
?>

Conclusion :


Pour utiliser cette class il vous faut en premier lieu paramétré les quelques variables pouvant l'être dans la déclaration de la class, ensuite vous pouvez donc en toutes logique vous connecter à MySQL en appelant la class de cette manière:
$mysql = new Mysql();
Les deux derniers arguments du constructeur permettent de choisir si l'on veut afficher les erreurs et les enregistrer, pour le reste il n'y as rien de méchant.

J'attends vos critiques avec impatience.

Au revoir.

A voir également

Ajouter un commentaire

Commentaires

davwart
Messages postés
855
Date d'inscription
mardi 19 novembre 2002
Statut
Membre
Dernière intervention
28 juillet 2009
1 -
hello..

pas de fonction pour se deconnecter?
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Effectzivement, dommage, ca ferait un joli destructeur pour la classe (en php5 en tous cas, et simule en php4).
massacr
Messages postés
233
Date d'inscription
vendredi 2 juillet 2004
Statut
Membre
Dernière intervention
4 janvier 2007
-
Met la liste des fonctions, et leurs arguments.
C'est interessant.
A+
ImmortalPC
Messages postés
955
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
11 novembre 2008
2 -
Salut,
une question super co* mais je voie pas l'utilité des class.
une class c'est plein de fonctions c'est tout pourquoi ne pas tout bètement mettre les fonctions ?
@+
malalam
Messages postés
10843
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
17 -
Oula, lol...ca va etre difficile de te repondre. Il y a bien trop d'avantages! Mais les classes ne sont a utiliser que dans certains cas.
Bon disons que ce sont 2 approches tres differentes de la programmation. Dans bien des cas, les classes sont plus pratiques a utiliser, et bien plus puissantes qu'un ensemble de fonctions. Parce qu'un objet possede des proprietes a lui, auquelles toutes ses methodes peuvent acceder. Parce qu'un objet peut-etre protege. Parce qu'un objet peut etre defini a partir d'un autre objet plus general...facilitant ainsi sa modification. Parce qu'un objet est reutilisable tres facilement. Parce qu'un objet peut etre tres specialise, et faire en un appel ce qui te prendrait 20 appels de fonctions pour le realiser.
pfff...lol. Il y a enormement d'avantages pratiques. Mais c'est avant tout une facon de penser la programation. Une philosophie de programmation quoi.

je te conseille de lire des articles sur la POO, et tu finiras bien par entrevoir les avantages.

L'avantage d'une classe bdd par exemple serait la reutilisabilite sur n'importe quel type de base (si l'objet est fait pour hein), avec les memes appels. Un controle total des donnees renvoyees, des erreurs, et une plus grande simplicite d'utilisation.

Bah le truc le plus evident pour moi : un objet est un ensemble de proprietes et de methodes. Une fonction reste tres isolee...

je laisse le soin a d'autres de te repondre peut-etre mieux que moi; je suis en manque d'inspiration la.

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.