|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
INTERFACE DATABASE ET CLASSE MYSQL
Information sur la source
Description
J'avais fait un peu de programmation objet en Java et j'ai voulu m'y mettre en PHP. J'ai donc décidé de faire une interface de manipulation de base de donnée et une classe Mysql l'implémentant pour deux raisons : - but pédagogique (voir la plupart de ce que l'on peut faire en PHP en objet) - créer une interface qui peut être complétée par d'autres classe l'implémentant pour l'accès à d'autres bases de données (il ne me semble pas que ce soit présent sur ce site) La classe Mysql utilise la classe mysqli (je l'utilise pour créer des méthodes qui me sembles utiles à la manipulation de base de données). Pourquoi avoir fait une classe utilisant une autre classe? Pour ne pas être limiter à mysqli (je peux toujours changer ma classe mysql sans changer les scriptes qui l'utilise) et pouvoir créer des méthodes qui répondent à mes besoins de manière plus précise et conforme à l'interface (même méthodes pour la manipulations de différentes bases de données). Voilà :-D J'espère que mes première lignes de code objet en PHP vous plairont (c'est ma première source également lol) ;-)
Source
- //Fichier Db.php
- <?php
- /************************************************************************
- Interface Database - David "Davjack" Bellanca
- Creer le 27 janvier 2008
- Modifie le 28 janvier 2008
- Compatible PHP5
-
- **************************************************************************/
-
- interface Db
- {
- /*-------------------------------------
- Partie de connexion a la base de donnee
- -------------------------------------*/
- //__construct utilise db_connect pour se connecter a la base de donnees
- /*
- $db_host : nom de l'hote, par exemple localhost
- $db_user : nom de l'utilisateur
- $db_pass : mot de passe
- $db_name : nom de la base de donnees
- */
- public function __construct($db_host,$db_user,$db_pass,$db_name);
- public function db_connect($db_host,$db_user,$db_pass,$db_name);
-
- //Verification de la connexion (retourne l'erreur si il y en a une, sinon null)
- //public function db_connectError();
-
- // Fermer la connexion
- public function db_close();
-
- // Lors de la destruction de la classe, on ferme la connexion
- public function __destruct();
-
- //Desactiver / Activer l'autocommit
- public function db_autocommit($TrueFalse);
-
- //Retourne la version du serveur
- public function db_version();
-
- /*-------------------------------------------
- Partie de manipulations de la base de donnees
- -------------------------------------------*/
- //Envoie d'une requete
- public function sql_query($query);
-
- //Valide une requete
- public function sql_commit();
-
- //Annuler une requete
- public function sql_rollback();
-
- //Retourne le resultat de la derniere requete sous forme d'un tableau associatif (une ligne)
- public function sql_arrayAssocResult();
-
- //Retourne le resultat de la derniere requete sous forme d'un tableau indexe numeriquement (une ligne)
- public function sql_arrayNumResult();
-
- //Retourne les resultats de la derniere requete sous forme d'un tableau associatif (plusieurs lignes)
- public function sql_arrayAssocResults();
-
- //Retourne les resultats de la derniere requete sous forme d'un tableau indexe numeriquement (plusieurs lignes)
- public function sql_arrayNumResults();
-
- //Retourne le nombre de lignes affectees par la derniere requete
- public function sql_numRows();
-
- //Retourne le nombre de colonnes de la derniere requete
- public function sql_numCols();
-
- //Retourne la PK auto-incremente/sequence de la derniere requete
- public function sql_lastPKIncremented();
-
- //Retourne la liste de toutes les tables de la base de donnees dans un tableau
- public function sql_listTables();
- }
- ?>
-
-
- //Fichier Mysql.php
- <?php
- /************************************************************************
- Classe Mysql - David "Davjack" Bellanca
- Creer le 27 janvier 2008
- Modifie le 28 janvier 2008
- Compatible PHP5
-
- **************************************************************************/
-
- require_once 'Db.php';
-
- class Mysql implements Db
- {
- private $mysqli;
-
- private $result;
- private $db_name;
-
- //--------
- //Methodes
- //--------
- //__construct utilise db_connect pour se connecter a la base de donnees
- public function __construct($db_host,$db_user,$db_pass,$db_name)
- {
- $this->db_connect($db_host,$db_user,$db_pass,$db_name);
- }
- public function db_connect($db_host,$db_user,$db_pass,$db_name)
- {
- unset($this->result);
- unset($this->mysqli);
- $this->db_name = $db_name;
- $this->mysqli = new mysqli($db_host,$db_user,$db_pass,$db_name);
-
- if (mysqli_connect_errno())
- {
- throw new Exception("Echec de la connexion");
- //throw new Exception("Echec de la connexion : ".mysqli_connect_error());
- }
- }
-
- // Fermer la connexion
- public function db_close()
- {
- $this->mysqli->close();
- }
-
- // Lors de la destruction de la classe, on ferme la connexion
- public function __destruct()
- {
- $this->db_close;
- }
-
- //Desactiver / Activer l'autocommit
- //!!! Ne fonctionne que sur le tables transactionnelles (comme InnoDB)
- public function db_autocommit($TrueFalse)
- {
- if (is_bool($TrueFalse))
- {
- $this->mysqli->autocommit($TrueFalse);
-
- //On verifie que l'autocommit a bien ete active/desactive
- if ($TrueFalse)
- {
- $this->sql_query("SELECT @@autocommit");
- $autocommit = $this->sql_arrayNumResult();
- if ($autocommit[0][0] != 1)
- throw new Exception("Erreur : l'autocommit n'a pas été activé");
- }
- else
- {
- $this->sql_query("SELECT @@autocommit");
- $autocommit = $this->sql_arrayNumResult();
- if ($autocommit[0][0] != 0)
- throw new Exception("Erreur : l'autocommit n'a pas été désactivé");
- }
-
- }
- else
- {
- throw new Exception("Vous devez entrer un booléen en paramètre");
- }
- }
-
- //Retourne la version du serveur
- public function db_version()
- {
- return $this->mysqli->get_server_info();
- }
-
- /*-------------------------------------------
- Partie de manipulations de la base de donnees
- -------------------------------------------*/
- //Envoie d'une requete
- public function sql_query($query)
- {
- if (!$this->result = $this->mysqli->query($query))
- {
- throw new Exception("Erreur de requête SQL : ".$this->mysqli->error);
- //throw new Exception("Erreur de requête SQL");
- }
- }
-
- //Valide une requete
- public function sql_commit()
- {
- $this->mysqli->commit();
- }
-
- //Annuler une requete
- public function sql_rollback()
- {
- if(!$this->mysqli->rollback())
- throw new Exception("Erreur rollback");
- }
-
- //Retourne le resultat de la derniere requete sous forme d'un tableau associatif (une ligne)
- public function sql_arrayAssocResult()
- {
- if ($this->result)
- {
- $result = $this->result->fetch_array(MYSQLI_ASSOC);
- return $result;
- }
- else
- {
- throw new Exception("Aucune requête n'a été exécutée");
- }
- }
-
- //Retourne le resultat de la derniere requete sous forme d'un tableau indexe numeriquement (une ligne)
- public function sql_arrayNumResult()
- {
- if ($this->result)
- {
- $result = $this->result->fetch_array(MYSQLI_NUM);
- return $result;
- }
- else
- {
- throw new Exception("Aucune requête n'a été exécutée");
- }
- }
-
- //Retourne les resultats de la derniere requete sous forme d'un tableau associatif (plusieurs lignes)
- public function sql_arrayAssocResults()
- {
- if ($this->result)
- {
- $i = 0;
- while ($temp = $this->result->fetch_array(MYSQLI_ASSOC))
- {
- $result[$i] = $temp;
- $i++;
- }
-
- return $result;
- }
- else
- {
- throw new Exception("Aucune requête n'a été exécutée");
- }
- }
-
- //Retourne les resultats de la derniere requete sous forme d'un tableau indexe numeriquement (plusieurs lignes)
- public function sql_arrayNumResults()
- {
- if ($this->result)
- {
- $i = 0;
- while ($temp = $this->result->fetch_array(MYSQLI_NUM))
- {
- $result[$i] = $temp;
- $i++;
- }
-
- return $result;
- }
- else
- {
- throw new Exception("Aucune requête n'a été exécutée");
- }
- }
-
- //Retourne le nombre de lignes affectees par la derniere requete
- public function sql_numRows()
- {
- return $this->mysqli->affected_rows;
- }
-
- //Retourne le nombre de colonnes de la derniere requete
- public function sql_numCols()
- {
- return $this->mysqli->field_count;
- }
-
- //Retourne la PK auto-incremente/sequence de la derniere requete
- public function sql_lastPKIncremented()
- {
- return $this->mysqli->insert_id;
- }
-
- //Retourne la liste de toutes les tables de la base de donnees dans un tableau
- public function sql_listTables()
- {
- $this->sql_query("SHOW TABLES FROM ".$this->db_name);
- $listTemp = $this->sql_arrayNumResults();
-
- $i = 0;
- foreach($listTemp as $cle=>$valeur)
- {
- foreach($valeur as $cle2=>$table)
- {
- $result[$i] = $table;
- $i++;
- }
- }
- return $result;
- }
- }
- ?>
-
-
- //Fichier utilisation.php
- <?php
- /************************************************************************
- Utilisation de la classe Mysql - David "Davjack" Bellanca
-
- **************************************************************************/
- try{
- //require_once 'myPHPException.php';
-
- //Pour ne pas afficher les erreurs si vous n'avez pas acces a php.ini.
- //A commenter pendant le developpement
- ini_set('display_errors','Off');
-
- require_once 'Mysql.php';
-
- //Creation d'une connexion a une base MySQL - Instanciation de la classe
- $db = new Mysql('host','login','mot de passe','base de donnee');
-
-
- //Affiche la version du serveur MySQL
- echo $db->db_version()."<br />";
-
-
- //FALSE pour arreter l'autocommit et TRUE pour l'activer
- //!!! Ne fonctionne que sur le tables transactionnelles (comme InnoDB)
- $db->db_autocommit(FALSE);
-
- $db->sql_query("delete from table");
-
-
- //Annule les
- //!!! Ne fonctionne que sur le tables transactionnelles (comme InnoDB)
- //et si l'autocommit est desactive
- $db->sql_rollback();
-
- $requete = "INSERT INTO table (...)
- VALUES (...)";
- $db->sql_query($requete);
-
-
- //Affichage de la valeur de l'auto-incrementation de la derniere requete
- echo "PK : ".$db->sql_lastPKIncremented()."<br />";
-
-
- //!!! Ne fonctionne que sur le tables transactionnelles (comme InnoDB)
- //et si l'autocommit est desactive
- $db->sql_commit();
-
-
- //Requete renvoyant plusieurs lignes
- $db->sql_query("select * from table");
-
-
- //Affichage du nombre de lignes affectees par la derniere requete
- echo "Nb lignes : ".$db->sql_numRows()."<br />";
- //Affichage du nombre de colonnes de la derniere requete
- echo "Nb colonnes : ".$db->sql_numCols()."<br />";
-
-
- //Parcours des resultats (plusieurs lignes) de la derniere requete
- foreach($db->sql_arrayNumResults() as $val) //ou $db->sql_arrayAssocResults();
- {
- foreach($val as $cle=>$valeur)
- {
- echo $cle.' : '.$valeur.'<br />';
- }
- echo "<br />";
- }
-
-
- //Requete renvoyant une ligne
- $db->sql_query("select * from table where num = 1");
-
-
- //Affichage de la ligne de resultat
- foreach($db->sql_arrayAssocResult() as $cle=>$valeur) //ou $db->sql_arrayNumResult()
- {
- echo $cle.' : '.$valeur.'<br />';
- }
-
-
- //Affichage de toutes les tables de la base
- foreach($db->sql_listTables('test') as $valeur)
- {
- echo $valeur.'<br />';
- }
-
-
- //Fermeture de la derniere connexion
- $db->db_close();
-
- }
- catch (Exception $e)
- {
- //Gestion des exceptions renvoyees par la classe
- echo $e->getMessage();
- }
-
- ?>
//Fichier Db.php
<?php
/************************************************************************
Interface Database - David "Davjack" Bellanca
Creer le 27 janvier 2008
Modifie le 28 janvier 2008
Compatible PHP5
**************************************************************************/
interface Db
{
/*-------------------------------------
Partie de connexion a la base de donnee
-------------------------------------*/
//__construct utilise db_connect pour se connecter a la base de donnees
/*
$db_host : nom de l'hote, par exemple localhost
$db_user : nom de l'utilisateur
$db_pass : mot de passe
$db_name : nom de la base de donnees
*/
public function __construct($db_host,$db_user,$db_pass,$db_name);
public function db_connect($db_host,$db_user,$db_pass,$db_name);
//Verification de la connexion (retourne l'erreur si il y en a une, sinon null)
//public function db_connectError();
// Fermer la connexion
public function db_close();
// Lors de la destruction de la classe, on ferme la connexion
public function __destruct();
//Desactiver / Activer l'autocommit
public function db_autocommit($TrueFalse);
//Retourne la version du serveur
public function db_version();
/*-------------------------------------------
Partie de manipulations de la base de donnees
-------------------------------------------*/
//Envoie d'une requete
public function sql_query($query);
//Valide une requete
public function sql_commit();
//Annuler une requete
public function sql_rollback();
//Retourne le resultat de la derniere requete sous forme d'un tableau associatif (une ligne)
public function sql_arrayAssocResult();
//Retourne le resultat de la derniere requete sous forme d'un tableau indexe numeriquement (une ligne)
public function sql_arrayNumResult();
//Retourne les resultats de la derniere requete sous forme d'un tableau associatif (plusieurs lignes)
public function sql_arrayAssocResults();
//Retourne les resultats de la derniere requete sous forme d'un tableau indexe numeriquement (plusieurs lignes)
public function sql_arrayNumResults();
//Retourne le nombre de lignes affectees par la derniere requete
public function sql_numRows();
//Retourne le nombre de colonnes de la derniere requete
public function sql_numCols();
//Retourne la PK auto-incremente/sequence de la derniere requete
public function sql_lastPKIncremented();
//Retourne la liste de toutes les tables de la base de donnees dans un tableau
public function sql_listTables();
}
?>
//Fichier Mysql.php
<?php
/************************************************************************
Classe Mysql - David "Davjack" Bellanca
Creer le 27 janvier 2008
Modifie le 28 janvier 2008
Compatible PHP5
**************************************************************************/
require_once 'Db.php';
class Mysql implements Db
{
private $mysqli;
private $result;
private $db_name;
//--------
//Methodes
//--------
//__construct utilise db_connect pour se connecter a la base de donnees
public function __construct($db_host,$db_user,$db_pass,$db_name)
{
$this->db_connect($db_host,$db_user,$db_pass,$db_name);
}
public function db_connect($db_host,$db_user,$db_pass,$db_name)
{
unset($this->result);
unset($this->mysqli);
$this->db_name = $db_name;
$this->mysqli = new mysqli($db_host,$db_user,$db_pass,$db_name);
if (mysqli_connect_errno())
{
throw new Exception("Echec de la connexion");
//throw new Exception("Echec de la connexion : ".mysqli_connect_error());
}
}
// Fermer la connexion
public function db_close()
{
$this->mysqli->close();
}
// Lors de la destruction de la classe, on ferme la connexion
public function __destruct()
{
$this->db_close;
}
//Desactiver / Activer l'autocommit
//!!! Ne fonctionne que sur le tables transactionnelles (comme InnoDB)
public function db_autocommit($TrueFalse)
{
if (is_bool($TrueFalse))
{
$this->mysqli->autocommit($TrueFalse);
//On verifie que l'autocommit a bien ete active/desactive
if ($TrueFalse)
{
$this->sql_query("SELECT @@autocommit");
$autocommit = $this->sql_arrayNumResult();
if ($autocommit[0][0] != 1)
throw new Exception("Erreur : l'autocommit n'a pas été activé");
}
else
{
$this->sql_query("SELECT @@autocommit");
$autocommit = $this->sql_arrayNumResult();
if ($autocommit[0][0] != 0)
throw new Exception("Erreur : l'autocommit n'a pas été désactivé");
}
}
else
{
throw new Exception("Vous devez entrer un booléen en paramètre");
}
}
//Retourne la version du serveur
public function db_version()
{
return $this->mysqli->get_server_info();
}
/*-------------------------------------------
Partie de manipulations de la base de donnees
-------------------------------------------*/
//Envoie d'une requete
public function sql_query($query)
{
if (!$this->result = $this->mysqli->query($query))
{
throw new Exception("Erreur de requête SQL : ".$this->mysqli->error);
//throw new Exception("Erreur de requête SQL");
}
}
//Valide une requete
public function sql_commit()
{
$this->mysqli->commit();
}
//Annuler une requete
public function sql_rollback()
{
if(!$this->mysqli->rollback())
throw new Exception("Erreur rollback");
}
//Retourne le resultat de la derniere requete sous forme d'un tableau associatif (une ligne)
public function sql_arrayAssocResult()
{
if ($this->result)
{
$result = $this->result->fetch_array(MYSQLI_ASSOC);
return $result;
}
else
{
throw new Exception("Aucune requête n'a été exécutée");
}
}
//Retourne le resultat de la derniere requete sous forme d'un tableau indexe numeriquement (une ligne)
public function sql_arrayNumResult()
{
if ($this->result)
{
$result = $this->result->fetch_array(MYSQLI_NUM);
return $result;
}
else
{
throw new Exception("Aucune requête n'a été exécutée");
}
}
//Retourne les resultats de la derniere requete sous forme d'un tableau associatif (plusieurs lignes)
public function sql_arrayAssocResults()
{
if ($this->result)
{
$i = 0;
while ($temp = $this->result->fetch_array(MYSQLI_ASSOC))
{
$result[$i] = $temp;
$i++;
}
return $result;
}
else
{
throw new Exception("Aucune requête n'a été exécutée");
}
}
//Retourne les resultats de la derniere requete sous forme d'un tableau indexe numeriquement (plusieurs lignes)
public function sql_arrayNumResults()
{
if ($this->result)
{
$i = 0;
while ($temp = $this->result->fetch_array(MYSQLI_NUM))
{
$result[$i] = $temp;
$i++;
}
return $result;
}
else
{
throw new Exception("Aucune requête n'a été exécutée");
}
}
//Retourne le nombre de lignes affectees par la derniere requete
public function sql_numRows()
{
return $this->mysqli->affected_rows;
}
//Retourne le nombre de colonnes de la derniere requete
public function sql_numCols()
{
return $this->mysqli->field_count;
}
//Retourne la PK auto-incremente/sequence de la derniere requete
public function sql_lastPKIncremented()
{
return $this->mysqli->insert_id;
}
//Retourne la liste de toutes les tables de la base de donnees dans un tableau
public function sql_listTables()
{
$this->sql_query("SHOW TABLES FROM ".$this->db_name);
$listTemp = $this->sql_arrayNumResults();
$i = 0;
foreach($listTemp as $cle=>$valeur)
{
foreach($valeur as $cle2=>$table)
{
$result[$i] = $table;
$i++;
}
}
return $result;
}
}
?>
//Fichier utilisation.php
<?php
/************************************************************************
Utilisation de la classe Mysql - David "Davjack" Bellanca
**************************************************************************/
try{
//require_once 'myPHPException.php';
//Pour ne pas afficher les erreurs si vous n'avez pas acces a php.ini.
//A commenter pendant le developpement
ini_set('display_errors','Off');
require_once 'Mysql.php';
//Creation d'une connexion a une base MySQL - Instanciation de la classe
$db = new Mysql('host','login','mot de passe','base de donnee');
//Affiche la version du serveur MySQL
echo $db->db_version()."<br />";
//FALSE pour arreter l'autocommit et TRUE pour l'activer
//!!! Ne fonctionne que sur le tables transactionnelles (comme InnoDB)
$db->db_autocommit(FALSE);
$db->sql_query("delete from table");
//Annule les
//!!! Ne fonctionne que sur le tables transactionnelles (comme InnoDB)
//et si l'autocommit est desactive
$db->sql_rollback();
$requete = "INSERT INTO table (...)
VALUES (...)";
$db->sql_query($requete);
//Affichage de la valeur de l'auto-incrementation de la derniere requete
echo "PK : ".$db->sql_lastPKIncremented()."<br />";
//!!! Ne fonctionne que sur le tables transactionnelles (comme InnoDB)
//et si l'autocommit est desactive
$db->sql_commit();
//Requete renvoyant plusieurs lignes
$db->sql_query("select * from table");
//Affichage du nombre de lignes affectees par la derniere requete
echo "Nb lignes : ".$db->sql_numRows()."<br />";
//Affichage du nombre de colonnes de la derniere requete
echo "Nb colonnes : ".$db->sql_numCols()."<br />";
//Parcours des resultats (plusieurs lignes) de la derniere requete
foreach($db->sql_arrayNumResults() as $val) //ou $db->sql_arrayAssocResults();
{
foreach($val as $cle=>$valeur)
{
echo $cle.' : '.$valeur.'<br />';
}
echo "<br />";
}
//Requete renvoyant une ligne
$db->sql_query("select * from table where num = 1");
//Affichage de la ligne de resultat
foreach($db->sql_arrayAssocResult() as $cle=>$valeur) //ou $db->sql_arrayNumResult()
{
echo $cle.' : '.$valeur.'<br />';
}
//Affichage de toutes les tables de la base
foreach($db->sql_listTables('test') as $valeur)
{
echo $valeur.'<br />';
}
//Fermeture de la derniere connexion
$db->db_close();
}
catch (Exception $e)
{
//Gestion des exceptions renvoyees par la classe
echo $e->getMessage();
}
?>
Conclusion
Pour l'utilisation de la classe, regardez le code de utilisation.php
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Creer MySQL database [ par pluton83fr ]
Slt Je suis un debutant en php, Je suis en train d installer un portail :Neocrome http://www.neocrome.net Et il me dise ca!!Mais le pb c'est que je n
Formulaire avec select et update de bdd mysql [ par arnold002 ]
Bonjour à tous,J'ai un formulaire qui contient 2 champs de type select : classe et annee.Je veux associer chaque classe à chaque année
passage de variables de form vers bdd mysql [ par arnold002 ]
Bonjour,Mon problème n'avance pas...Mon form contient 2 champs select for($i<FONT color=#008000 s
Problème affichage BD multiples [ par ekipage2 ]
Bonjour,j'ai plusieurs BD : eleve / matières / et exercicesLorque l'élèv se connecte, il peut afficher la liste des exercices correspondants à sa clas
problème mysql : Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource [ par wizard512 ]
je sui entrain de créer un script et je rencontre l'érreur suivante:==>mysql_query(): supplied argument is not a valid MySQL-Link re
Recherche mysql [ par simon0000 ]
salut tous le monde ,j'ai une table mysql nomé ecole ou il ya
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ès bien quand je fait une requete INSERT, etc .. M
Phpmyvisites et mysql [ par flopad ]
Bonjour,J'ai récupéré phpmyvisites pour l'utiliser sur mon intranet.j'ai un soucis lors de l'installation, ca me dit "localhost" databa
Erreur MySQL [ par coockiesch ]
Salut! Je viens d'installer, sur mon ordi, Apache2, MySQL, PHP5 et PhpMyAdmin. On m'a demandé de choisir l'extension mysqli, je choisi mysqli (pa
Problème de code [ par stu76 ]
Bonjour tout le monde ,Voilà je planche sur un programme scolaire et j'ai un gros prob, je travaille sur un programme qui utilise trois base de d
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|