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 664 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

Messages postés
4
Date d'inscription
samedi 17 décembre 2005
Statut
Membre
Dernière intervention
11 août 2007

Sa remonte \o/ Mais j'ai tout de même une question, est-ce qu'une mise-à-jour vers PHP5 est attendue pour ta classe?
Messages postés
30
Date d'inscription
dimanche 13 juin 2004
Statut
Membre
Dernière intervention
12 décembre 2005

D'accord, mais tu conviendras que l'on voit rarement sa,et personnellement j'aurais tendance à penser que fermer pour rouvrir c'est utiliser des resseources pour rien, mais sa ne change rien au fait que c'est plus simple de faire un mysq_close(); qu'un $Mysql->close, perso je trouve que la première solution est plus "pratique", mais chacun ces goûts.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Hello,

php ne ferme la connexion qu'à la fin du script.
Or, on peut très bien faire appel à plusieurs requêtes dans un seul script (une seule page, si tu préfères).
Personnellement, j'ouvre ma connexion, je fais mon mysql_query, je ferme la connexion, je vais chercher mes enregistrements (mysql_fetch_assoc par exemple), je les traite...et je peux avoir d'autres requêtes à faire plus tard, après traitement, donc je ré-ouvre, etc...
Messages postés
30
Date d'inscription
dimanche 13 juin 2004
Statut
Membre
Dernière intervention
12 décembre 2005

Ce que j'ai dit ce n'est pas que la fonction mysql_close est inutile pas qu'il est inutile d'en refaire une qui l'appellerais elle même étant donnée que l'on ne l'appel qu'une fois par page et qu'il n'y as en cas général aucun arguments à apporté.

Au revoir.
Messages postés
42
Date d'inscription
jeudi 17 juin 2004
Statut
Membre
Dernière intervention
15 septembre 2005

c'est tout sauf inutile ! ça permet de libérer la connexion au serveur et ainsi de l'espace mémoire...
Afficher les 12 commentaires

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.