Je vais prendre comme exemple les liens de PDG.

Voici l'ancien code qui permettait de se connecter à la base de données et une fonction qui faisait une requête :

mysql_connect($host, $user, $password) OR die(mysql_error());
mysql_select_db($db) OR die(mysql_error());
 
function pseudos($pseudo)
{
	$query = 'SELECT `pseudo`, COUNT(id) FROM `cafzone_urls` WHERE (`pseudo` LIKE \'%'.$pseudo.'%\') GROUP BY `pseudo` ORDER BY `pseudo` ASC;';
 
	$mysql_query = mysql_query($query));
	$num_rows = mysql_num_rows($mysql_query);
 
	if ($num_rows == 0)
	{
 	 	print('Pas de résultat.');
	}
	elseif ($num_rows >= 20)
	{
 	 	print('Trop de résultats : '.$num_rows.' résultats. Précisez.');
	}
	else
	{
	 	print('<ul>');
	 	while ($query = mysql_fetch_array($mysql_query))
		{
		 	print('<li><a href="javascript:choixPseudo(\''.addslashes($query['pseudo']).'\');">'.str_strong($pseudo, $query['pseudo']).' ('.$query['COUNT(id)'].')</a></li>'."\n");
		}
		print('</ul>'."\n");
	}
}

On note l'utilisations de fonctions commençant avec mysql qui alourdissent le code.

Le code adapté à Clearbricks :

# clearbricks
require_once(dirname(__FILE__).'/../../dotclear/inc/clearbricks/_common.php');
 
try {
	$con = dbLayer::init('mysql',$host,$db,$user,$password);
}
catch (Exception $e)
{
	die('can\'t connect');
}
 
function pseudos($pseudo)
{
	global $con;
 
	$query = 'SELECT `pseudo`, COUNT(id) FROM `cafzone_urls` WHERE (`pseudo` LIKE \'%'.$pseudo.'%\') GROUP BY `pseudo` ORDER BY `pseudo` ASC;';
 
	$rs = $con->select($query);
	$num_rows = $rs->count();
 
	if ($rs->isEmpty())
	{
 	 	print('Pas de résultat.');
	}
	elseif ($num_rows >= 20)
	{
 	 	print('Trop de résultats : '.$num_rows.' résultats. Précisez.');
	}
	else
	{
	 	print('<ul>');
		while ($rs->fetch())
		{
		 	print('<li><a href="javascript:choixPseudo(\''.addslashes($rs->f('pseudo')).'\');">'.str_strong($pseudo,$rs->f('pseudo')).' ('.$rs->f('COUNT(id)').')</a></li>'."\n");
		}
		print('</ul>'."\n");
	}
}

Explications :

# clearbricks
require_once(dirname(__FILE__).'/../../dotclear/inc/clearbricks/_common.php');

On appelle toutes les fonctions de Clearbricks, même si on a besoin que de dblayer, on aura alors accés à toutes les fonctions utiles de Clearbricks, au cas ou. Attention au chemin !

$con = dbLayer::init('mysql',$host,$db,$user,$password);

La connexion est l'objet $con. Ici on se connecte à une base mysql, les autres arguments ont été renseignés avant.

global $con;

Comme on l'a vu dans les billets précédents, on accéde à $con grâce à global.

$rs = $con->select($query);
$num_rows = $rs->count();

Ça devient intéressant : on a un code beaucoup plus court qui effectue les mêmes actions qu'avant.

Enfin la boucle fonctionne comme dans le billet traitant des select.

Conclusions :

En utilisant Clearbricks pour les opérations sur la base de données, on peut facilement basculer vers une base de données PostgreSQL et on a un code plus léger et plus clair. Il suffit de comparer :

Avant :

mysql_connect($host, $user, $password) OR die(mysql_error());
mysql_select_db($db) OR die(mysql_error());

Après :

$con = dbLayer::init('mysql',$host,$db,$user,$password);

Avant :

$mysql_query = mysql_query($query));
$num_rows = mysql_num_rows($mysql_query);

Après :

$rs = $con->select($query);
$num_rows = $rs->count();

Avant :

while ($query = mysql_fetch_array($mysql_query))

Après :

while ($rs->fetch())

Avant :

$query['pseudo']

Après :

$rs->f('pseudo')

Modifications apportées :

  • 2007-09-27 : remplacement de
$con = dbLayer::init('mysql',$host,$db,$user,$password);

par

try {
	$con = dbLayer::init('mysql',$host,$db,$user,$password);
}
catch (Exception $e)
{
	die('can\'t connect');
}

Ceci évite d'afficher le mot de passe (!) si la connexion au serveur SQL est impossible.

  • 29-02-2008 : remplacement de
if ($num_rows == 0)

par

if ($rs->isEmpty())