jeudi 29 Oct 2015

Convertir la classe MDB2 en MySQLi standard PHP

PHPComme moi vous avez peut-être écrit des sites il y a quelques années avec la classe MDB2, équivalente à PDO, qui sert à utiliser une base de données avec quelques fonctions supplémentaires pratiques, mais surtout la portabilité: ces deux classes utilisent les mêmes fonctions pour une base MySQL ou PostGreSQL ou autre...

Cependant, si PDO a été incluse dans PHP et toujours maintenue, MDB2 n'a plus vraiment évoluée depuis des années. Comme cette surcouche fait perdre quelques performances, il est surement plus sage de s'en passer, surtout si l'hypothétique passage à PostGreSQL n'arrive jamais! ;-)

~

Pour éviter de réécrire tous ses sites ou pour avoir l'avantage des quelques fonctions bien pratique de MDB2, notamment dans l'extension Extended (getRow, getCol, GetOne...) je vous propose la classe MDBDid. Comme elle est très simple, il y a quelques points à adapter pour une conversion mais cela peut se faire par une recherche/remplacement automatique.

Si nécessaire, il faut: remplacer « extended-> » par rien, « $db =& MDB2::singleton(); » par « global $db; », « $r->getMessage() » par $db->error, et adapter les « PEAR::isError() » en utilisant $db->error. Cette liste n'est pas exhaustive et vous avez pu utiliser d'autres fonctions de la classe PEAR ou MDB2 qui ne sont pas reprises.
Mais avec ces modifications, MDB2 devrait continuer de fonctionner aussi, sauf pour getAll qui n'est pas refait.

Dans les fichiers de configuration, la connexion sera différente:

require 'MDBDid.php';
global $db;
$db = @new MDBDid ('serveur', 'utilisateur', 'MdP', 'base');
if ($db->connect_error)
exit ('Erreur de connexion à la base de données.');
$db->query ("SET NAMES 'utf8'");

~

Voici la classe MDBDid:


<?php
/* Veuillez laisser un lien vers http://azur-dev.kizone.net/1302-mdb2 SVP
+ Pour compatibilité MDB2, sinon on peut enlever cette classe et query, exec et lastInsertId, en modifiant les sites pour se passer de ces fonctions: +*/
class MDBDid_Result extends MySQLi_Result
{
public function fetchRow()
{
return $this->fetch_assoc();
}
 
public function numRows()
{
return $this->num_rows;
}
 
public function seek($déplacement)
{
return $this->data_seek($déplacement);
}
}
 
class MDBDid extends mysqli
{
public function query ($requête)
{
$this->real_query($requête);
return new MDBDid_Result($this);
}
public function exec ($requête)
{
return parent::query($requête);
}
public function lastInsertId()
{
return $this->insert_id;
}
/*--*/
 
public function getOne ($requête)
{
$résultat = parent::query ($requête);
if ($résultat === false)
return $this->error;
$rangée = $résultat->fetch_row();
$one = $rangée[0];
$résultat->close();
return $one;
}
 
public function getRow ($requête)
{
$résultat = parent::query ($requête);
if ($résultat === false)
return $this->error;
$rangée = $résultat->fetch_assoc();
$résultat->close();
return $rangée;
}
 
public function getCol ($requête)
{
$résultat = parent::query ($requête);
if ($résultat === false)
return $this->error;
$colonne = array();
while (is_array( $rangée = $résultat->fetch_row() ))
$colonne[] = $rangée[0];
$résultat->close();
return $colonne;
}
 
public function getAssoc ($requête)
{
$résultat = parent::query ($requête);
if ($résultat === false)
return $this->error;
$colonne = array();
while (is_array( $rangée = $résultat->fetch_row() ))
$colonne[$rangée[0]] = $rangée[1];
$résultat->close();
return $colonne;
}
}
?>


café Cet article vous a aidé? 
Offrez-moi un café!
Agrégateur informatique

Laisser un commentaire

Azur Dev