Classe francophone d'exploitation mysql

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 724 fois - Téléchargée 17 fois

Contenu du snippet

Dans l'objectif de créer un framework PHP francophone, j'ai mis au point une classe d'exploitation MySQL. La voici donc:

Source / Exemple :


<?php
/****************************************************************************************
Classe pour la manipulation de bases de données MySQL
Auteur : Mathieu ROBIN
Créée le : 02/04/2007
Dernière modification le : 24/12/2007
Commentaires : le constructeur connecte automatiquement l'instance de la classe à la base

                                                                                                                                                                                  • /
class DBMySql { /**
  • Identifiant de connection
*
  • @var Entier
  • /
private $ConnectionID; /**
  • Variable de stockage de résultat
*
  • @var Multiple
  • /
private $result; /**
  • Ligne de table ou de résultat de requête
*
  • @var Tableau
  • /
private $ligne; /**
  • Serveur hôte de la base de données
*
  • @var Chaîne
  • /
private $serveur=""; /**
  • Nom de la base de données
*
  • @var Chaîne
  • /
private $base=""; /**
  • Utilisateur de la base de données
*
  • @var Chaîne
  • /
private $utilisateur=""; /**
  • Mot de passe de l'utilisateur de la base de données
*
  • @var Chaîne
  • /
public $mdp=""; /**
  • Constructeur
*
  • @param Chaîne $serveur
  • @param Chaîne $utilisateur
  • @param Chaîne $mdp
  • @param Chaîne $bdd
  • @param Entier $ctID Identifiant de connection
  • @return DBMySql
  • /
function DBMySql($serveur, $utilisateur, $mdp, $base, $ctID=0) { $this->serveur=$serveur; $this->utilisateur=$utilisateur; $this->mdp=$mdp; $this->base=$base; $this->ConnectionID=$ctID; $retour=$this->ConnectionID; try { $this->Connection($this->serveur, $this->utilisateur, $this->mdp, $this->base); } catch (Exception $Except) { $retour=false; } return($retour); } /**
  • Ouvre une connexion à un serveur MySQL
*
  • @param Chaîne $serveur
  • @param Chaîne $utilisateur
  • @param Chaîne $mdp
  • @param Chaîne $bdd
  • @return Booléen
  • /
function Connection($serveur, $utilisateur, $mdp, $base) { try { $this->ConnectionID=mysql_connect($serveur, $utilisateur, $mdp); return($this->SelectBDD($base)); } catch (Exception $Except) { return(false); } } /**
  • Sélectionne une base de données
*
  • @param Chaîne $bdd
  • @return Booléen
  • /
function SelectBDD($bdd) { $this->base=$bdd; try { return(mysql_select_db($bdd, $this->ConnectionID)); } catch(Exception $Except) { return(false); } } /**
  • Envoie une requête de mise à jour et retourne combien de lignes ont été affecté par l'opération
*
  • @param Chaîne $sql
  • @return Tableau
  • /
function ReqUPDATE($sql) { if(preg_match("#^UPDATE (.){1,} SET (.){1,};$#i", $sql)) { try { mysql_query($sql); $this->result=mysql_affected_rows(); $retour[0]=$this->result; $retour[1]=true; } catch(Exception $Except) { $retour[0]=0; $retour[1]=false; $retour[2]=$Except->getMessage(); } } else { $retour[0]=0; $retour[1]=false; $retour[2]="Mauvais format"; } return($retour); } /**
  • Envoie une requête d'insertion et retourne l'identifiant automatique généré par MySQL pour cette insertion
*
  • @param Chaîne $sql
  • @return Tableau
  • /
function ReqINSERT($sql) { if(preg_match("#^INSERT INTO (.){1,} VALUES (.){1,};$#i", $sql)) { try { mysql_query($sql); $this->result=mysql_insert_id(); $retour[0]=$this->result; $retour[1]=true; } catch (Exception $Except) { $retour[0]=0; $retour[1]=false; $retour[2]=$Except->getMessage(); } } else { $retour[0]=0; $retour[1]=false; $retour[2]="Mauvais format"; } return($retour); } /**
  • Envoie une requête de suppression et retourne combien de lignes ont été affecté par l'opération
*
  • @param Chaîne $sql
  • @return Tableau
  • /
function ReqDELETE($sql) { if(preg_match("^DELETE FROM (.){1,};$#i",$sql)) { try { mysql_query($sql); $this->result=mysql_affected_rows(); $retour[0]=$this->result; $retour[1]=true; } catch (Exception $Except) { $retour[0]=0; $retour[1]=false; $retour[2]=$Except->getMessage(); } } else { $retour[0]=0; $retour[1]=false; $retour[2]="Mauvais format"; } return($retour); } /**
  • Envoie une requête de sélection et retourne combien de lignes sont sélectionnées
*
  • @param Chaîne $sql
  • @return Tableau
  • /
function ReqSELECT($sql) { if(preg_match("#^SELECT (.){1,} FROM (.){1,};$#i", $sql)) { try { $this->result=mysql_query($sql); $retour[0]=mysql_num_rows($this->result); $retour[1]=true; } catch (Exception $Except) { $retour[0]=0; $retour[1]=false; $retour[2]=$Except->getMessage(); } } else { $retour[0]=0; $retour[1]=false; $retour[2]="Mauvais format"; } return($retour); } /**
  • Retourne la valeur maximale d'un champ dans une table
*
  • @param Chaîne $table Table
  • @param Chaîne $champ
  • @return Entier
  • /
function MaxChamp($table, $champ) { return($this->ReqSELECT("SELECT MAX(".$champ.") FROM ".$table)); } /**
  • Retourne le nombre de lignes d'un résultat MySQL
*
  • @return Tableau
  • /
function NbrLignes() { try { $retour[0]=mysql_num_rows($this->result); $retour[1]=true; } catch (Exception $Except) { $retour[0]=0; $retour[1]=false; $retour[2]=$Except->getMessage(); } return($retour); } /**
  • Retourne le nombre de lignes affectées lors de la dernière opération MySQL
*
  • @return Entier
  • /
function TuplesAffect() { return(mysql_affected_rows()); } /**
  • Retourne l'identifiant généré par la dernière requête INSERT MySQL
*
  • @return Entier
  • /
function IDInsertion() { return(mysql_insert_id($this->ConnexionID)); } /**
  • Retourne le texte associé avec l'erreur générée lors de la dernière requête
*
  • @return Chaîne
  • /
function Erreur() { return(mysql_error()); } /**
  • Ferme une connection MySQL
*
  • @return Booléen
  • /
function Deconnection() { return(mysql_close()); } } ?>

Conclusion :


Si vous pouviez me dire ce que vous en pensez, objectivement. Me dire ce que vous pensez qu'il manque ou qui devrait être tourné différemment afin de l'améliorer, ça serait sympa.

La classe est commentée pour pouvoir être utilisée dans des éditeurs supportant l'auto-complétion, tel que Zend Development Environment.

Lorsque le framework sera "terminé", je le mettrai également sur Codes-Sources dans son intégralité.

Merci de votre aide

A voir également

Ajouter un commentaire Commentaires
Messages postés
47
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
2 janvier 2008

L'astuce est que j'ai corrigé mon code depuis en suivant ces critiques. Certes, je ne les ai pas encore toutes suivies et donc corrigé tout mon code. Mais c'est surtout qu'à l'origine, les informations de connexion étaient stockées directement dans ma classe et que ni le constructeur, ni d'autres fonctions ne permettaient de les modifier. Ce qui est parfaitement idiot.

Donc là je prends la défense de malalam.

Merci de l'encouragement quand même^^
Messages postés
28
Date d'inscription
dimanche 12 mai 2002
Statut
Membre
Dernière intervention
2 janvier 2008

MALALAM, avant de poster des critiques qui descendent le travail fait par les internautes qui font vivre le site que tu administres, tu devrais plutôt réviser la POO.

Je ne suis pas un expert mais je sais au moins faire la différence entre une classe et une instance de classe (un objet pour info :p) cf ton premier post :2 classes...

Bon code dans l'ensemble, bonne idée de base consistant a faire une API franco. C nice :)
Messages postés
47
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
2 janvier 2008

Ah ouais, pas idiot. Bon, donc c'est reparti pour un tour^^
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
22
Hello,

tu as 2 façons de procéder.
1 - Tu lances des exceptions qui doivent arrêter l'exécution de ta classe, dans ce cas tu ne fais que les lancer dans ta classe et tu les interceptes en dehors.
2 - tu veux pouvoir gérer tes exceptions dans ta classe (par exemple, j'essaye une requête...mais si je ne suis pas connecté, je veux pouvoir intercepter l'excption et me connecter pour pouvoir conbtinuer), dans ce cas, tu gères tes try catch dans ta classe. Ce n'est pas le cas le plus fréquent, mais ça peut arriver.

1 exemple illustrant les 2 exemples :

<?php
class a {
public function myFunc() {
if(false === isset($b)) {
throw new Exception('Erreur $b n\'est pas initialisé');
}
echo $b;
}
}

try {
$a = new a;
$a->myFunc();
} catch(Exception $e) {
echo $e;
}

class c {
public function myFunc() {
try {
if(false === isset($b)) {
throw new Exception('Erreur $b n\'est pas initialisé');
}
} catch(Exception $e) {
$b = 1;
}
echo $b;
}
}

$c = new c;
$c->myFunc();
?>
Messages postés
47
Date d'inscription
vendredi 7 octobre 2005
Statut
Membre
Dernière intervention
2 janvier 2008

Donc en gros, mes try-catch ne servent à rien? Ils doivent être mis dans le code utilisant ma classe là où je ferai appel à mes fonctions?
Afficher les 11 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.