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

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

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.