begin process at 2010 03 14 08:56:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASS MYSQL (FLOPTWO)

CLASS MYSQL (FLOPTWO)


 Description

Il s'agit d'une petite class (inspirée des class du cakePHP) qui permet de gérer de simples requêtes sous MySQL!
Elle supporte les table avec préfixe.

Source

  • <?php
  • ////////////////////////////////////////////////////////////////////
  • // MYSQL
  • class MySQL
  • {
  • # Script réalisé par floptwo (floptwo@gmail.com)
  • # Plus d'infos sur www.floptwo.com
  • var $bdd_hote = 'localhost';
  • var $bdd_user = 'root';
  • var $bdd_pass = '';
  • var $bdd_bdd = 'mabdd';
  • var $bdd_prefix = 'flop_';
  • var $bdd_connected = false;
  • var $lastInsertId;
  • function connection()
  • {
  • if (mysql_connect($this->bdd_hote, $this->bdd_user, $this->bdd_pass))
  • {
  • if (mysql_select_db($this->bdd_bdd))
  • {
  • $this->bdd_connected = true;
  • }
  • }
  • return $this->bdd_connected;
  • }
  • function bdd_prefix($table)
  • {
  • return $this->bdd_prefix.$table;
  • }
  • function query($sql)
  • {
  • if($this->connection())
  • {
  • $array = array();
  • $query = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error);
  • if (eregi("^SELECT",$sql))
  • {
  • $mysql_num_rows = mysql_num_rows($query);
  • if ($mysql_num_rows == 0)
  • {
  • $array = false;
  • }
  • elseif ($mysql_num_rows > 0)
  • {
  • while($row = mysql_fetch_assoc($query))
  • {
  • $array[] = $row;
  • }
  • }
  • mysql_free_result($query);
  • }
  • if (eregi("^INSERT",$sql))
  • {
  • $this->lastInsertId = mysql_insert_id();
  • }
  • mysql_close();
  • if (eregi("^SELECT",$sql))
  • {
  • return $array;
  • }
  • return true;
  • }
  • return false;
  • }
  • function findAll($table, $conditions_array = null)
  • {
  • if ($conditions_array != null)
  • {
  • $i = 0;
  • $count = count($conditions_array);
  • $conditions = 'WHERE ';
  • foreach ($conditions_array as $key => $value)
  • {
  • $i++;
  • if ($key == 'id')
  • {
  • $conditions .= "$key = '$value'";
  • }
  • else
  • {
  • $conditions .= "$key = '$value'";
  • }
  • if ($i != $count) $conditions .= ' AND ';
  • }
  • }
  • return $this->query('SELECT * FROM `'.$this->bdd_prefix($table).'` '.$conditions.' ORDER BY id ASC;');
  • }
  • function find($table, $conditions_array = null)
  • {
  • if ($conditions_array != null)
  • {
  • $i = 0;
  • $count = count($conditions_array);
  • $conditions = 'WHERE ';
  • foreach ($conditions_array as $key => $value)
  • {
  • $i++;
  • if ($key == 'id')
  • {
  • $conditions .= "$key = '$value'";
  • }
  • else
  • {
  • $conditions .= "$key = '$value'";
  • }
  • if ($i != $count) $conditions .= ' AND ';
  • }
  • }
  • return $this->query('SELECT * FROM `'.$this->bdd_prefix($table).'` '.$conditions.' LIMIT 1;');
  • }
  • function findById($table, $id)
  • {
  • return $this->find($table, array('id'=>$id));
  • }
  • function insertInto($table, $fields = array())
  • {
  • $i = 0;
  • $count = count($fields);
  • $keys = '(';
  • $values = '(';
  • foreach ($fields as $key => $value)
  • {
  • $i++;
  • $keys .= "`$key`";
  • switch (strtoupper($value))
  • {
  • case 'NOW()' : case 'NOW' : $values .= 'NOW()'; break;
  • default : $values .= "'$value'"; break;
  • }
  • if ($i != $count)
  • {
  • $keys .= ',';
  • $values .= ',';
  • }
  • }
  • $keys .= ')';
  • $values .= ')';
  • return $this->query('INSERT INTO `'.$this->bdd_prefix($table).'` '.$keys.' VALUES '.$values.';');
  • }
  • function getLastId()
  • {
  • return $this->lastInsertId;
  • }
  • function update($table, $id, $conditions_array)
  • {
  • $i = 0;
  • $count = count($conditions_array);
  • $conditions = 'SET ';
  • foreach ($conditions_array as $key => $value)
  • {
  • $i++;
  • $conditions .= "$key = '$value'";
  • if ($i != $count) $conditions .= ', ';
  • }
  • return $this->query('UPDATE `'.$this->bdd_prefix($table).'` '.$conditions.' WHERE id = '.$id.' LIMIT 1;');
  • }
  • function del($table, $id)
  • {
  • return $this->query('DELETE FROM `'.$this->bdd_prefix($table).'` '.$conditions.' WHERE id = '.$id.' LIMIT 1;');
  • }
  • # Script réalisé par floptwo (floptwo@gmail.com)
  • # Plus d'infos sur www.floptwo.com
  • }
  • ?>
  • <?php
  • // EXEMPLES D'UTILISATION
  • $sql = new MySQL();
  • // SELECT
  • // findAll
  • $categories = $sql->findAll('categories');
  • foreach ($categories as $categorie)
  • {
  • echo $categorie['id'];
  • echo $categorie['title'];
  • }
  • // find
  • $categorie = $sql->findById('categories', array('title'=>'flop'));
  • echo $categorie[0]['id'];
  • echo $categorie[0]['title'];
  • // findById
  • $categorie = $sql->findById('categories', '2');
  • echo $categorie[0]['id'];
  • echo $categorie[0]['title'];
  • // INSERT TO
  • if ($sql->insertInto('categories', array('title'=>'nouvelle catégorie', 'description'=>'Ma description')))
  • {
  • // Voila
  • }
  • // après un INSERT TO, voila de quoi récupérer la dernière ligne ajoutée
  • $newCatId = $sql->getLastId();
  • // UPDATE
  • if ($sql->update('categories', '2', array('title'=>'floptwo')))
  • {
  • // Voila
  • }
  • // DELETE
  • if ($sql->del('categories', '2'))
  • {
  • // Voila
  • }
  • ?>
<?php
////////////////////////////////////////////////////////////////////
// MYSQL
class MySQL
{
  # Script réalisé par floptwo (floptwo@gmail.com)
  # Plus d'infos sur www.floptwo.com

  var $bdd_hote = 'localhost';
  var $bdd_user = 'root';
  var $bdd_pass = '';	
  var $bdd_bdd = 'mabdd';
  var $bdd_prefix = 'flop_';
  
  var $bdd_connected = false;
  var $lastInsertId;
  
  function connection()
  {	
  	if (mysql_connect($this->bdd_hote, $this->bdd_user, $this->bdd_pass))
  	{	
  		if (mysql_select_db($this->bdd_bdd))
  		{
  			$this->bdd_connected = true;
  		}
  	}
  	return $this->bdd_connected;
  }
  
  function bdd_prefix($table)
  {
  	return $this->bdd_prefix.$table;
  }  
  
  function query($sql)
  {
    if($this->connection())
    {
      $array = array();
      $query = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error); 
      
      if (eregi("^SELECT",$sql))
      {
        $mysql_num_rows = mysql_num_rows($query);
        if ($mysql_num_rows == 0)
        {
          $array = false;
        }
        elseif ($mysql_num_rows > 0)
        {
          while($row = mysql_fetch_assoc($query)) 
          {
            $array[] = $row;
          }
        }
        mysql_free_result($query); 
      }
      if (eregi("^INSERT",$sql))
      {
        $this->lastInsertId = mysql_insert_id();
      }
      mysql_close();
      
      if (eregi("^SELECT",$sql))
      {
        return $array; 
      }
      
      return true;
    }
    return false;
  }
  
  function findAll($table, $conditions_array = null)
  {
    if ($conditions_array != null)
    {
      $i = 0;
      $count = count($conditions_array);
      $conditions = 'WHERE '; 
      foreach ($conditions_array as $key => $value)
      {
        $i++;
        if ($key == 'id')
        {
          $conditions .= "$key = '$value'";
        }
        else
        {
          $conditions .= "$key = '$value'";
        }
        
        if ($i != $count) $conditions .= ' AND ';
      }
    }
    return $this->query('SELECT * FROM `'.$this->bdd_prefix($table).'` '.$conditions.' ORDER BY id ASC;');
  }
  
  function find($table, $conditions_array = null)
  {
    if ($conditions_array != null)
    {
      $i = 0;
      $count = count($conditions_array);
      $conditions = 'WHERE '; 
      foreach ($conditions_array as $key => $value)
      {
        $i++;
        if ($key == 'id')
        {
          $conditions .= "$key = '$value'";
        }
        else
        {
          $conditions .= "$key = '$value'";
        }
        
        if ($i != $count) $conditions .= ' AND ';
      }
    }
    return $this->query('SELECT * FROM `'.$this->bdd_prefix($table).'` '.$conditions.' LIMIT 1;');
  }
  
  function findById($table, $id)
  {
    return $this->find($table, array('id'=>$id));
  }
  
  function insertInto($table, $fields = array())
  {
    $i = 0;
    $count = count($fields);
    $keys = '('; 
    $values = '(';
    foreach ($fields as $key => $value)
    {
      $i++;
      $keys .= "`$key`";
      switch (strtoupper($value))
      {
        case 'NOW()' : case 'NOW' : $values .= 'NOW()'; break;
        default : $values .= "'$value'"; break;
      }
      
      if ($i != $count) 
      {
        $keys .= ',';
        $values .= ',';
      }
    }
    $keys .= ')'; 
    $values .= ')';

    return $this->query('INSERT INTO `'.$this->bdd_prefix($table).'` '.$keys.' VALUES '.$values.';');
  }  
  
  function getLastId()
  {
    return $this->lastInsertId;
  }  
  
  function update($table, $id, $conditions_array)
  {
    $i = 0;
    $count = count($conditions_array);
    $conditions = 'SET '; 
    foreach ($conditions_array as $key => $value)
    {
      $i++;
      $conditions .= "$key = '$value'";
      
      if ($i != $count) $conditions .= ', ';
    }
    return $this->query('UPDATE `'.$this->bdd_prefix($table).'` '.$conditions.' WHERE id = '.$id.' LIMIT 1;');
  }
  
  function del($table, $id)
  {
    return $this->query('DELETE FROM `'.$this->bdd_prefix($table).'` '.$conditions.' WHERE id = '.$id.' LIMIT 1;');
  }
 
  # Script réalisé par floptwo (floptwo@gmail.com)
  # Plus d'infos sur www.floptwo.com
}


?>

<?php 

// EXEMPLES D'UTILISATION

  $sql = new MySQL();
  
  // SELECT
    // findAll
    $categories = $sql->findAll('categories');
      foreach ($categories as $categorie)
      {
        echo $categorie['id'];
        echo $categorie['title'];
      }
    
    // find
    $categorie = $sql->findById('categories', array('title'=>'flop'));
    
      echo $categorie[0]['id'];
      echo $categorie[0]['title'];
    
    // findById
    $categorie = $sql->findById('categories', '2');
    
      echo $categorie[0]['id'];
      echo $categorie[0]['title'];
  
  // INSERT TO
  if ($sql->insertInto('categories', array('title'=>'nouvelle catégorie', 'description'=>'Ma description')))
  {
    // Voila
  }
  // après un INSERT TO, voila de quoi récupérer la dernière ligne ajoutée
  $newCatId = $sql->getLastId();

  // UPDATE
  if ($sql->update('categories', '2', array('title'=>'floptwo')))
  {
    // Voila
  }
  
  // DELETE
  if ($sql->del('categories', '2'))
  {
    // Voila
  }
?>



 Sources du même auteur

Source avec Zip Source avec une capture NUAGE DE MOTS OU TAG CLOUD-FLOPTWO
Source avec Zip UPLOAD - FLOPTWO
Source avec Zip NAVIGATION 404 - FLOPTWO
Source avec Zip Source avec une capture CALENDRIER - FLOPTWO

 Sources de la même categorie

Source avec Zip CLASSE TABLE HTML DYNAMIQUE par LDDL
Source avec Zip GÉNÉRATEUR DE COUCHE DAO POUR SITE WEB À PARTIR D'UNE BASE D... par alexfool
Source avec Zip [PHP5.2] CLASSE PDO par hornetbzz
Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip EXTEND MYSQLI par petibras
Source avec Zip CLASSE SQL par benjycorp
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

Commentaires et avis

Commentaire de kankrelune le 09/05/2007 12:00:27

Comme je l'ais dit pour une autre source... concernant mysql je ne vois pas l'intérêt d'encapsuler les fonctions native de php si c'est juste pour y ajouter un timer lors de l'exécution de la requête... s'il faut développer un classe SGDB autant faire une classe d'abstraction sinon c'est de la perte de performance pour rien... mieux vaut faire du procédural dans ce cas là... .. .

Sinon le coup de l'expression rationelle dans query() c'est bof bof... tu perd du temps pour rien... autant externaliser le traitement du résultat via des méthodes dédiées à ça... en plus tu fais deux eregi pour savoir si c'est un SELECT... .. .

De même il ne faut pas que ta méthode query() ferme la connection à la base de données sinon tu est obligé de réouvrir la connection à chaque requête et comme ta méthode query() n'ouvre pas la connection tu es carrément obligé d'instancier un nouvel objet à chaque requête... .. . Ô_o

@ tchaOo°

Commentaire de kankrelune le 09/05/2007 12:06:42

Je rajouterais que...

$mysql_num_rows = mysql_num_rows($query);
if ($mysql_num_rows == 0)
{
    $array = false;
}
elseif ($mysql_num_rows > 0)
{
    while($row = mysql_fetch_assoc($query))
    {
        $array[] = $row;
    }
}

Si MySQL ne te renvois pas de résultat tu renvois false... donc si tu passe ton résultat dans une boucle ça risque de coincer... autant faire...

if (mysql_num_rows($query) > 0)
{
    while(false !== ($row = mysql_fetch_assoc($query)))
        $array[] = $row;
}

Comme ça si MySQL ne renvoie pas de résultat tu récupère un tableau vide ce qui est plutot logique... .. .

Sinon ta méthode query() renvoie toujours true dans le cas d'un INSERT ou d'un DELETE même si MySQL à eu un problème et t'a renvoyée false... .. .

@ tchaOo°

Commentaire de FhX le 09/05/2007 13:22:29

"if (mysql_num_rows($query) > 0)
{
    while(false !== ($row = mysql_fetch_assoc($query)))
        $array[] = $row;
}
"
A partir du moment où on se retrouve à faire ca, c'est qu'on a pas compris l'intérêt d'une classe SQL.

Au lieu de faire ce genre de truc moche, c.a.d. de parcourir les enregistrements MySQL pour les mettre dans un tableau, puis renvoyer ce tableau, puis le (re)parcourir pour faire de l'affichage... Il existe un moyen plus rapide, mais cependant plus dur à comprendre ==> les itérateurs.

De toute facon, à partir du moment où tu parcours des données dans une classe SQL, c'est qu'il y a une erreur.



La classe SQL n'est la que pour faire un lien entre le serveur SGBD et ton projet... certainement pas pour mettre en forme les données SQL dans un tableau.
Ca, c'est en dehord de ta classe que ca se passe !

Commentaire de kankrelune le 09/05/2007 14:27:06

Si tu lis mon premier commentaire c'est exactement ce que je dis FhX... le second commentaire intervient sur la façon de faire en l'occurrence renvoyé un boléen à la place d'un tableau si la requête ne renvoie rien... .. .

@ tchaOo°

Commentaire de FhX le 09/05/2007 20:29:05

Ah ouais, mais j'ai fais nuit blanche alors j'ai pas tout lu :D

Commentaire de Naixn le 10/05/2007 11:01:30

http://www.php.net/~derick/meeting-notes.html#move-ereg-to-pecl
> Les expressiosn régulières POSIX (eregi, etc.) seront "deprecated" dans PHP6. De toute façon, rien d'étonnant, c'est moins perfomant et moins puissant que PCRE =) (les fonctions preg_*)

Juste pour info aussi :
Bien loin de moi l'idée de vous contredire sur le principe, mais PDO ne fonctionne pas par itérateurs, et renvoi bel et bien un tableau de données.

Je ne dis pas que c'est bien, mais PDO n'est pas non plus à cracher dessus, même s'il est loin d'être une référence.

De toute façon le mieux à faire, ça serait de coder tout ça en extension C :p
(A condition de bien coder en C bien évidemment...)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Récupérer un tableau d'une bdd [ par Leneuf8000 ] Rebonjour, j'ai enregistr&#233; dans ma base des tableaux dans une table, ce tableau contient des valeurs qui doivent &#234;tre mises &#224; jour chaq demande d'information [ par benyouness ] bonjour tlsj ai organisé klk class et sa mache bien en local( easyphp 3.0 )&lt;?phprequire_once("BDG.class.php"); class BDMySQL extends BDG{    prot retypage des objets varaibles de session aprés session_start [ par szambaux ] Bonjour, j'utilise AMFPHP pour mes echanges flash-&gt;php, dans mes variables de session je stock mes instance de classe par exemple mysql et user.Le Affichage page par page [ par Leneuf8000 ] Bonjour, j'aimerai r&#233;aliser un affichage page par page. En fait je voudrai que tout soit g&#233;rer dans le m&#234;me fichier.&nbsp; Ainsi pour l Optimisation de connection a une base de donn?|e SQL [ par Teclis01 ] Voil&#168;&#164; en fait j aimerais savoir comment optimiser les connection a une bas de donn&#168;&#166;es SQL. J aimerais savoir ds quel cas on doit Problème checkbox sur liste dynamique [ par ] Bonjour, je suis bloqu&#233; sur un script, pourriez vous m'aider svp. j'ai une page choiximp.php qui extrait de ma base etiquettes table produits Fonctionne pas sous internet explorer [ par Vin Gazoil ] Salut &#224; tous! en fait mon code fonctione tr&#233;s bien sous Mozilla, ce qui n'est pas le cas sous internet Explorer. Mon probl&#232;me est sur l Chiffre avec virgule dans Bdd + calculs [ par laubro ] Bonjour,Voil&#224; j'ai des champs de ma base devant contenir des chiffres repr&#233;sentant des prix, donc il y a besoin de pouvoir mettre des chiffr hebergement de site web [ par ganou390 ] comment heberger un site en php mysql comment cr&#233;e les table mysql merci beaucoup Problème php newslettter (lancement au chargement de la page) [ par juju901 ] bonjour; Pouvez vous faire en sorte que la newsletter en se lance quand on clik sur le bouton envoyer et non &#224; son chargement.Voici le code :&lt;


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
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 : 1,217 sec (3)

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