begin process at 2012 05 27 22:19:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASSE SQL

CLASSE SQL


 Information sur la source

Note :
4,5 / 10 - par 4 personnes
4,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :sql, classe, class, mysql, objet Niveau :Initié Date de création :01/08/2009 Date de mise à jour :01/08/2009 15:29:36 Vu / téléchargé :4 299 / 286

Auteur : benjycorp

Ecrire un message privé
Site perso
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Cette classe à pour but de faciliter la manipulation
des bases de données mySQL dans vos sources PHP.

Pour faciliter vos implémentations, le code est commentée et un fichier README.txt est présent dans le zip.

Source

  • <?php
  • /*********************************************
  • * Ecrit par Benjy, Administrateur de WOD Company *
  • * Copyright 2009 - WOD Company *
  • * Copie et utilisation de la source autorisée à *
  • * condition de laisser ce copyright *
  • *********************************************/
  • class myDB{
  • /*
  • 1) Proprietes:
  • - string myHost -- Serveur
  • - string myPort -- Port
  • - string myUser -- Utilisateur
  • - string myPass -- Mot de passe
  • - string myBase -- Base de donnees
  • - array of array of string myResult -- Matrice des résultats sql
  • - int myRowCount -- Nombre de lignes de resultats sql
  • */
  • private $myHost;
  • private $myPort;
  • private $myUser;
  • private $myPass;
  • private $myBase;
  • public $myResult;
  • public $myRowCount;
  • /*
  • 2) Methodes
  • - __construct() -- Initialise l'objet
  • - __destruct() -- Detruit l'objet
  • - Connect(string $host, string $port, string $user, string $pass, string $db) -- Connection a la base de donnees
  • - Query(string $sql) -- Execute la requete $sql et stocke les resultats dans $myResult
  • - Execute(string $sql) -- Execute la requete $sql sans stocker de resultats
  • - FreeResult() -- Reinitialise les variables de resultat
  • */
  • public function __construct(){
  • $this->myResult=array();
  • $this->myRowCount=0;
  • $this->myHost='';
  • $this->myPort='';
  • $this->myUser='';
  • $this->myPass='';
  • $this->myBase='';
  • }
  • public function __destruct(){
  • $this->myResult=array();
  • $this->myRowCount=0;
  • $this->myHost='';
  • $this->myPort='';
  • $this->myUser='';
  • $this->myPass='';
  • $this->myBase='';
  • }
  • public function Connect($host, $port, $user, $pass, $db){
  • if (isset($host)){ //On verifie l'existence des parametres
  • if (isset($port)){
  • if (isset($user)){
  • if (isset($pass)){
  • if (isset($db)){
  • $this->myHost=$host; //On stocke les parametres de connexion
  • $this->myPort=$port;
  • $this->myUser=$user;
  • $this->myPass=$pass;
  • $this->myBase=$db;
  • if (mysql_connect($this->myHost.':'.$this->myPort, $this->myUser, $this->myPass)){ //On teste la connexion a la bdd
  • if (mysql_select_db($this->myBase)){
  • mysql_close();
  • return CT_OK;
  • }
  • else
  • return CT_ERR_MYDB_NOTEXISTS;
  • }
  • else
  • return CT_ERR_MYDB_CONNECT;
  • }
  • else
  • return CT_ERR_MYDB_DB;
  • }
  • else
  • return CT_ERR_MYDB_PASS;
  • }
  • else
  • return CT_ERR_MYDB_USER;
  • }
  • else
  • return CT_ERR_MYDB_PORT;
  • }
  • else
  • return CT_ERR_MYDB_HOST;
  • }
  • public function Query($sql){
  • if (is_string($sql)){
  • if (mysql_connect($this->myHost.':'.$this->myPort, $this->myUser, $this->myPass)){ //On se connecte a la bdd
  • if (mysql_select_db($this->myBase)){
  • $tmp=mysql_query($sql); //On execute la requete
  • $this->myRowCount=0; //On initialise le nombre de ligne de resultat
  • while ($this->myResult[$this->myRowCount]=mysql_fetch_assoc($tmp)){ //On recupere les lignes de resultat
  • $this->myRowCount+=1;
  • }
  • mysql_close(); //On ferme la bdd
  • return CT_OK;
  • }
  • else
  • return CT_ERR_MYDB_CONNECT;
  • }
  • else
  • return CT_ERR_MYDB_CONNECT;
  • }
  • }
  • public function Execute($sql){
  • if (is_string($sql)){
  • if (mysql_connect($this->myHost.':'.$this->myPort, $this->myUser, $this->myPass)){ //On se connecte a la bdd
  • if (mysql_select_db($this->myBase)){
  • mysql_query($sql); //On execute la requete
  • mysql_close(); //On ferme la bdd
  • return CT_OK;
  • }
  • else
  • return CT_ERR_MYDB_CONNECT;
  • }
  • else
  • return CT_ERR_MYDB_CONNECT;
  • }
  • }
  • public function FreeResult(){
  • $this->myResult=array(); //On reinitialise la matrice des resultats
  • $this->myRowCount=0; //On reinitialise le nombre de lignes de resultats
  • return CT_OK;
  • }
  • }
  • ?>
<?php
/*********************************************
* Ecrit par Benjy, Administrateur de WOD Company *
* Copyright 2009 - WOD Company			    *
* Copie et utilisation de la source autorisée à 	    *
* condition de laisser ce copyright			    *
*********************************************/

	class myDB{
	/*
	1) Proprietes:
	- string myHost -- Serveur
	- string myPort -- Port
	- string myUser -- Utilisateur
	- string myPass -- Mot de passe
	- string myBase -- Base de donnees
	- array of array of string myResult -- Matrice des résultats sql
	- int myRowCount -- Nombre de lignes de resultats sql
	*/
		private $myHost; 
		private $myPort;
		private $myUser;
		private $myPass;
		private $myBase;
		public $myResult;
		public $myRowCount;

	/*
	2) Methodes
	- __construct() -- Initialise l'objet
	- __destruct() -- Detruit l'objet
	- Connect(string $host, string $port, string $user, string $pass, string $db) -- Connection a la base de donnees
	- Query(string $sql) -- Execute la requete $sql et stocke les resultats dans $myResult
	- Execute(string $sql) -- Execute la requete $sql sans stocker de resultats
	- FreeResult() -- Reinitialise les variables de resultat
	*/
		public function __construct(){
			$this->myResult=array();
			$this->myRowCount=0;
			$this->myHost='';
			$this->myPort='';
			$this->myUser='';
			$this->myPass='';
			$this->myBase='';
		}
		
		public function __destruct(){
			$this->myResult=array();
			$this->myRowCount=0;
			$this->myHost='';
			$this->myPort='';
			$this->myUser='';
			$this->myPass='';
			$this->myBase='';
		}
		
		public function Connect($host, $port, $user, $pass, $db){
			if (isset($host)){ //On verifie l'existence des parametres
				if (isset($port)){
					if (isset($user)){
						if (isset($pass)){
							if (isset($db)){
								$this->myHost=$host; //On stocke les parametres de connexion
								$this->myPort=$port;
								$this->myUser=$user;
								$this->myPass=$pass;
								$this->myBase=$db;
								if (mysql_connect($this->myHost.':'.$this->myPort, $this->myUser, $this->myPass)){ //On teste la connexion a la bdd
									if (mysql_select_db($this->myBase)){
										mysql_close();
										return CT_OK;
									}
									else
										return CT_ERR_MYDB_NOTEXISTS;
								}
								else
									return CT_ERR_MYDB_CONNECT;								
							}
							else
								return CT_ERR_MYDB_DB;
						}
						else
							return CT_ERR_MYDB_PASS;
					}
					else
						return CT_ERR_MYDB_USER;
				}
				else
					return CT_ERR_MYDB_PORT;
			}
			else
				return CT_ERR_MYDB_HOST;
		}
		
		public function Query($sql){
			if (is_string($sql)){
				if (mysql_connect($this->myHost.':'.$this->myPort, $this->myUser, $this->myPass)){ //On se connecte a la bdd
					if (mysql_select_db($this->myBase)){
						$tmp=mysql_query($sql); //On execute la requete
						$this->myRowCount=0; //On initialise le nombre de ligne de resultat
						while ($this->myResult[$this->myRowCount]=mysql_fetch_assoc($tmp)){ //On recupere les lignes de resultat
							$this->myRowCount+=1;
						}
						mysql_close(); //On ferme la bdd
						return CT_OK;
					}
					else
						return CT_ERR_MYDB_CONNECT;
				}
				else
					return CT_ERR_MYDB_CONNECT;
			}
		}
		
		public function Execute($sql){
			if (is_string($sql)){
				if (mysql_connect($this->myHost.':'.$this->myPort, $this->myUser, $this->myPass)){ //On se connecte a la bdd
					if (mysql_select_db($this->myBase)){
						mysql_query($sql); //On execute la requete
						mysql_close(); //On ferme la bdd
						return CT_OK;
					}
					else
						return CT_ERR_MYDB_CONNECT;
				}
				else
					return CT_ERR_MYDB_CONNECT;
			}
		}		
		
		public function FreeResult(){
			$this->myResult=array(); //On reinitialise la matrice des resultats
			$this->myRowCount=0; //On reinitialise le nombre de lignes de resultats
			return CT_OK;
		}
	}
?>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

01 août 2009 15:29:37 :
Oubli du fichier defines.inc.php qui contient les constantes.

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GÉNÉRATION DE CLASSES D'ACCÈS AUX DONNÉES À PARTIR DES TABLE... par djroulo
Source avec Zip GERER UN ENTREPOT VIA PHP 5 MYSQL VERSION OBJET ( PDO) par fabienenvac
CLASSE DATABASE POUR CONNECTION ET MODIFICATION D'UNE BDD MY... par franco_se
CLASSE OBJET DAO COUCHE D'ACCÈS À MYSQL DATA ACCESS OBJECT par djroulo
Source avec Zip [PHP 5] CLASSE SQL par FhX

Commentaires et avis

Commentaire de dorian91 le 02/08/2009 02:57:50

Salut benjycorp

Je ne vois pas l'intérêt de ta source...
Il n'y a pas d'abstraction de base de données, tu recode les fonctions déjà existantes en n'y apportant rien de plus.
As tu regardé du coté de PDO (cf lien : http://fr.php.net/manual/fr/book.pdo.php).

Bonne prog
A plus

Commentaire de cpcpc le 02/08/2009 11:48:29 1/10

'mysql_' est le connecteur historique, écrire une classe avec est aussi utile et relevant que de vouloir réparer une mégane avec des pièces de 4L... mysqli est orienté objet, même s'il est utilisable en mode procédural, sinon il y a effectivement PDO, 'mysql_' n'est conservée qu'à des fins de compatibilité. Tente plutôt de développer une couche d'abstraction qui te serve dans tes développements (par exemple), là tu as perdu du temps à réinventer la roue.

Commentaire de astro53 le 02/08/2009 12:30:15

Salut BenjyCorp,
Juste en lisant ta sources je dirais qu il y a quelques point a revoir.
Premierement dans ta function Connect, il n est pas necessaire de verifier l'existence des differents parametre vu qu aucun n est identifier comme null, donc si tu n as pas mis le bon nombre de parametre ca te renverras automatiquement une erreur, sauf si ta reel intention etait de preciser quelles parametre sont errones.
Deuxiemement dans tes functions Query et execute. Ici tu devrais verifier la presence de donner dans tes variables de connection.
A la place de ceci $this->myRowCount+=1 tu peut aussi ecrire myRowCount++ ca te fera gagner 2 octets!
Voila mes conseils si tu veut ameliorer ta source.

PS: CPCPC tu as peut etre raison dans ce que tu dis mais moi je ne connais que mysql je ne sais pas me servir de PDO ou de mysqli, je me suis fais une classe mysql pour mes sites et c est pratique...

PS: Dorian91 Merci pour le lien je regarde tout de suite.
A bientot
Astro

Commentaire de MangaII le 03/08/2009 08:33:50 2/10

Salut !

Je suis bien d'accord avec mes prédécesseurs ...
Je rajouterai juste une chose, je pense qu'en terme de performances, le fait de reconnecter et de ferme la connexion de la base à chaque requête fait une grosse perte de temps. En plus, ça génère beaucoup de connections (parallèles dès qu'il y a plusieurs clients), étant donnée qu'on utilise rarement une seule requête par page, je trouve dommage que ta fonction "connect" ne se connecte pas et garde la connexion ouverte.

A+
Nico

Commentaire de astro53 le 03/08/2009 08:41:29

Salut MangaII
Va donc voir le lien de Dorian91 sur la PDO et utilise le persistent et meme le prepare. C est exactement ce qu il te faut.
A bientot
Astro

Commentaire de aKheNathOn le 03/08/2009 10:35:18 7/10

Salut Benjy,

Source simpliste mais orientée objet, l'abstraction de la base de données y est car l'utilisateur de la classe n'écrit pas directement des appels vers mysql_*.

C'est vrai que la classe n'utilise que mysql comme moteur et n'en propose pas d'autres mais cela correspond à + de 90% des bases utilisées avec PHP.

En tant que niveau initié cela répond à un besoin de simplicité du débutant lambda qui n'a pas forcément envie de jouer avec des itérateurs ou du PDO.

Le seul hic c'est éventuellement l'execute et query qui refont des connections à chaque fois, peut-être faire ceci :

Quand tu utilises connect :
$this->db = mysql_select_db($this->myBase);

Et quand tu executes une requette :
mysql_query($sql, $this->db);

Ca évitera de refaire une connexion à la base, même si elle est persistante en dehors du script, ça te fera toujours perdre 5ms par connexion.

Bonne continuation,
akh

Commentaire de sneezy le 07/08/2009 12:37:53 8/10

Bonjour Benjy.

Rien de plus à ajouter à ce que dit Akhénathon.

A priori ce site est destiné aussi bien aux débutants (dont moi) qu'aux Gourous trop souvent avides de remarques un peu trop acerbes et acides, même si certaines sont peu ou prou justfiées ou parfois complètement à côté de la plaque (comme c'est le cas ici pour les 2 premiers posts).

Donc, bravo pour l'effort de partager ton code, surtout si tu y apportes les quelques corrections nécesaires.

Bon courage.

PS: Au fait, PDO n'est pas disponible sur tous les serveurs ni même chez tous les ISP (voir même quand il est correctement implémenté)!

Commentaire de sneezy le 07/08/2009 12:46:15

Au fait, au sujet des connexions permanentes ou non, c'est un choix difficile à prendre car en fait tout le monde ne bénéficie par d'une liaison internet à haut débit. En ce qui me concerne, n'ayant pas la possibilité d'avoir l'ADSL la où je réside, je suis contraint d'utiliser une clef 3G+ avec un débit très limié et des coupures très fréquentes. Une petite amérioration de ton code serait donc de pouvoir choisir par un paramètre passé à l'objet si l'on veut établir une connexion pemanente ou si l'on doit se reconnecter à chaque requête.

Commentaire de dorian91 le 09/08/2009 23:50:10

Salut Sneezy

Je ne vois pas en quoi mon commentaire est a coté de la plaque.
Pour moi il n'y a pas de gain a utiliser cette source car elle n'apporte pas de fonctionnalités supplémentaires ou un meilleur confort d'utilisation.
J'ai cité PDO qui est quand même largement répandu chez les hébergeurs (très souvent il y a au moins le pilote pour mysql).
De plus il n'est pas plus difficile de se servir de PDO que de cette classe

$oDb = new myDB();
$oDb->Connect('localhost', 3306, 'root', '', 'test');
$oDb->Query('SELECT truc FROM machin;');
print_r($oDb->myResult);

$oPdo  = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$oStmt = $oPdo->query('SELECT truc FROM machin;');
print_r($oStmt->fetchAll());

Je ne vois vraiment pas en quoi c'est plus difficile.

A plus

Commentaire de sneezy le 10/08/2009 22:06:36

Bonjour Dorian91.

Loin de moi l'idée de lancer une polémique ici, mais comme l'a très bien expliqué Maître Akhénathon, l'abstraction de la base de données existe bel et bien.

Par ailleurs, comme je l'ai dit précédemment, PDO n'est malheureusement pas disponible chez tous les hébergeurs, même ceux qui proposent MySQL en standard dans leur offre, et certains (comme AMEN pour n'en citer qu'un pour l'exemple) ne savent pas le paramétrer correctement, ce qui rend son usage parfois impossible.

Utilisateur (entre autre) de ce fournisseur, j'ai été moi-même amené à écrire une classe pour mes propres besoins utilisée avec certains sites hébergés chez eux.

Enfin, je trouvais que votre post était vraiment "sec" pour ce nouveau contributeur, ce qui ne peut que l'encourager à ne plus partager ses codes, ce qui est à l'inverse de ce qui semble être le but de ce site.

A mon sens, et sans vouloir nullement vous offensé, je pense que si vous n'avez rien de plus positif à apporter dans un post de ce genre, y compris sous forme de critiques objectives, il est alors plus sympa de ne pas contribuer.

A mon avis, les utilisateurs des codes qui sont proposés sont suffisamment fins pour savoir s'il est intéressant ou non d'utiliser ce qui est proposé sans que l'on soit obligé de "tacler".

J'espère ne pas vous avoir choqué ni blessé par ma franchise car même si la référence à PDO était intéressante à faire, il me semble que cela pouvait être fait de manière plus sympatique.

Just my 2 cents.

Sneezy.

Commentaire de chris188 le 17/08/2009 14:35:38

Peut être ceci pourrait servir dans l'execute...

Magique les 6 premiers caractères d'une requête pour savoir combien au lieu de les compter.

switch (substr(strtolower($req),0,6)) {
case 'select':
//Combien ?
$ret["_Nb"]=mysql_num_rows($rq);
break;
case 'insert':
//Autoincrement ?
$ret["_Id"]=mysql_insert_id($rq);
case 'update':
case 'delete':
//Affected rows ?
$ret["_Nb"]=mysql_affected_rows($rq);
break;
default:
break;
}

Très bien ta source,
bonne continuation

Bravo Sneezy :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

passage de variables de form vers bdd mysql [ par arnold002 ] Bonjour,Mon probl&#232;me n'avance pas...Mon form contient 2 champs select for($i<FONT color=#008000 s Retour des données d'une classe MySQL [ par Jerem_ ] Salut, Depuis ce matin, j'asseye de coter une classe MySQL pour mon site. La classe marche tr&#232;s bien quand je fait une requete INSERT, etc .. M Problème d'utilisation d'une classe MySQL du site [ par tataye ] Bonjour,Je suis en train de faire des tests avec la classe SQL  de FhX (source N°33135) et je rencontre actuellement quelques difficultés.J'ai fait un Probleme sql [ par Marroche ] Bonjour, j'ai un probleme avec une requete mysql. Je l'ai testé avec easyphp et ca m'envoie l'erreur suivante : Parse error: parse error in c:\program Figer et colorer un enregistrement de textarea [ par Piegan ] Bonjour à Toutes et à Tous Voilà mon problème je désire figer et colorer l'enregistrement d'un textarea, d'une catégorie d'utilisateur, en haut d'un insertion des donnée dans une table [ par shumi_shumi ] salut , mon probleme c'est que je veux remplir une table à partir d'un fichier qui contient un ensemble des numero de telephones mon code est le suiva remise a zéro d'un liens [ par speedylol ] bonjour voici le petit probléme que j'ai j aimerais remettre mon liens lire message a zéro quand on clik dessus .Open est a zero quand on introduit le Requete SQL avec plusieurs champs [ par christuckers ] Hello les CSistes !!Une petite question. J'ai besoin de faire une petite requete qui est vraiment mini mais qui m'enerve car je n'y arrive pas.Voici m zut sa fonction besoin d'aide [ par speedylol ] bonjour voilà je créer un script de messagerei online le probléme que j ai c'est que l'update ne fonction pas seirez vous m'aider svp?????$sql = "SELE Envois de fichiers php vers mysql [ par jonathan724 ] Salut ! j' ai un problème, j' aimerai à partir d' un formulaire, envoyer les donnés du formulaire vers ma page mysql. J' ai déja fais le code mais il


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales