Classe de connexion MySQL

Eléphant du PHP | 493 Messages

11 sept. 2005, 10:53

Ce bout de code est une réponse au message de delcedo galaxialord. Je vous présente ici une petite classe gérant une connexion MySQL et les fonctions s'articulant autour de celle-ci.
<?php

class SQL
{
	private $db_id	= false;
	private $dbname	= '';
	private $host	= '';
	private $pass	= '';
	private $user	= '';

	public $res		= '';
	public $row		= array();
	public $num		= 0;

	//
	// CONSTRUCTEUR
	public function __construct
	(
		$host		= '',		// string	Adresse du serveur MySQL
		$user		= '',		// string	Nom d'utilisateur
		$pass		= '',		// string	Mot de passe
		$dbname		= '',		// string	Nom de la base de données
		$connect	= true		// boolean	Connexion lors de la création de l'objet
	)
	{
		$this->host = (string)$host;
		$this->pass = (string)$pass;
		$this->user = (string)$user;

		$this->dbname = (string)$dbname;

		if ( (bool)$connect === true )
		{
			// Etablie la connexion à la base de données
			$this->connect();
		}
	} // end of the "__construct()" function

	//
	// FERME LA CONNEXION
	public function __destruct
	(
		// void
	)
	{
		// Ferme la connexion si celle-ci est active
		$this->close();
	} // end of the "__destruct()" function

	//
	// FERME LA CONNEXION
	public function close
	(
		// void
	)
	{
		// Ferme la connexion si celle-ci est active
		if ( $this->db_id )
		{
			if ( $this->res )
				mysql_free_result( $this->res );

			return mysql_close( $this->db_id );
		}
		else
		{
			return false;
		}
	} // end of the "close()" function

	//
	// CONNEXION A LA BDD
	public function connect
	(
		// void
	)
	{
		// Evite d'ouvrir une deuxième connexion
		if ( (bool)$this->db_id === false )
		{
			// Connexion au serveur MySQL
			$this->db_id = mysql_connect
			(
				$this->host,
				$this->user,
				$this->pass
			);

			if ( $this->db_id )
			{
				// Selection de la base de données
				if ( ! mysql_select_db( $this->dbname ) )
				{
					// Fermeture de la connexion si la connexion à la base
					// de données échoue
					$this->close();
				}

				return $this->db_id;
			}
			else
			{
				return false;
			}
		}
		else
		{
			return $this->db_id;
		}
	} // end of the "connect()" function

	//
	// RETOURNE UN TABLEAU CONTENANT L'ERREUR SQL ET LE SON NUMERO
	public function error
	(
		// void
	)
	{
		return array
		(
			'errno'		=> mysql_errno( $this->db_id ),
			'error'		=> mysql_error( $this->db_id )
		);
	} // end of the "error()" function

	//
	// RETOURNE UN TABLEAU CONTENANT LES RESULTATS
	public function fetch_array
	(
		$res = false	// resource		Ressource de la requête SQL
	)
	{
		if ( (bool)$res === false )
			$res = $this->res;

		$this->row = mysql_fetch_array( $res );
		return $this->row;
	} // end of the "fetch_array()" function

	//
	// DERNIER ID INSERE
	public function next_id
	(
		// void
	)
	{
		$this->res = mysql_insert_id( $this->db_id );
		return $this->res;
	} // end of the "next_id()" function

	//
	// COMPTE LE NOMBRE DE RESULTATS
	public function num_rows
	(
		$res = false	// resource		Ressource de la requête SQL
	)
	{
		if ( (bool)$res === false )
			$res = $this->res;

		$this->num = mysql_num_rows( $res );
		return $this->num;
	} // end of the "num_rows()" function

	//
	// EXECUTE LA REQUETE $query
	public function query
	(
		$query		// string	Requête SQL à exécuter sur le serveur
	)
	{
		$this->num = 0;
		$this->row = array();

		$this->res = mysql_query( $query, $this->db_id );

		return $this->res;
	} // end of the "query()" function
} // en of the "SQL" class

?>
Edit: Ajout de la fonction __destruct()

Mammouth du PHP | 19672 Messages

11 sept. 2005, 15:53

Intéressant. Je remarque toutefois deux choses:
  1. Un nom de fonction sauf erreur comporte des parenthèses... que tu n'as pas mises.
  2. Ajouter des commentaires phpDoc pour générer une documentation augmenterait l'intérêt de la chose :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 493 Messages

11 sept. 2005, 16:43

regarde mieux cyrano, il y a des parenthèse ... à la ligne en dessous !
si je n'ai pas mis de commentaires type PHPDoc c'est que ... j'aime pas :D
même si certains seront vraiment rétissant à ma façon de commenter, je la trouve au final plus pratique !

Mammouth du PHP | 19672 Messages

11 sept. 2005, 16:51

Ok vu pour les parenthèses, original.

Les commentaires phpDoc, ce n'est pas une question de goût, ça permet de gérérer une documentation utilisable infiniment plus pratique et ce automatiquement avec phpDocumentor. Personnellement je l'utilise et c'est autrement plus simple. Ça permet si on utilise correctement ce système de faire en plus les liens entre différentes classes d'un même package. Donc en fin de compte, le goût intervient très peu si ce n'est lors du choix de modèle de présentation de la documentation. Et ça n'interdit nullement les commentaires de ligne en plus.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Petit nouveau ! | 1 Messages

20 sept. 2005, 11:17

Bonjour
C'est classe est vraiment sympa, ce que j'essayer de faire en fonction, mais sans arriver à qqchose d'aussi abouti.

Par contre, je ne comprend pas du tout comment fonctionne les classes.
Est ce que vous pourriez illustrer ce post avec des exemples ?
Merci :)

J'ai compris comment me connecter.

Code : Tout sélectionner

<?php include('sql.classe.php'); $cnt=new SQL; $cnt->connect(); ?>
Ensuite, je comprend pas la comment récuperer l'id de connexion. Elle est nescessaire pour la fermeture de la base je crois ...

J'essaye un truc du genre :
<?php
include('sql.classe.php');

$cnt=new SQL;
$cnt->connect();

$cnt->close($db_id);
?>
mais, ça marche pas :)

Merci pour vos éventuelles lumieres.

Sky

Mammouth du PHP | 19672 Messages

20 sept. 2005, 12:44

Par contre, je ne comprend pas du tout comment fonctionne les classes.
Est ce que vous pourriez illustrer ce post avec des exemples ?
Merci :)
skyg, ce forum n'est pas là pour qu'on y pose des questions, c'est pour avoir des échanges autour du développement d'un projet. Pour ton problème, pose des questions sur le forum "PHP" ou "Débuter en PHP" et fais le tour des tutos, il y a pas mal de matière sur la programmation orientée Objet en PHP sur Internet.

Cependant, pour Vaedan, cette question a au moins un avantage : elle souligne l'importance de documenter son code. Les commentaire du style phpDoc sont fait pour ça. C'est important dans le cadre d'un développement open-source et au moins aussi important pour toi: dans 6 mois ou un an, quand tu voudras reprendre ton code pour le mettre à jour, tu y trouveras un avantage et un gain de temps considérable en ayant pas besoin de décortiquer ton code pour comprendre le raisonnement suivi lors du développement.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: