15:5824062007
Utiliser les fonctions dblayer de Clearbricks dans une application
Par Moe - Site / Dév
Dotclear utilise les fonctions de Clearbricks pour se connecter à la base de données, nous avons vu dans les billets précédents que le code est simple et léger. Nous allons utiliser ces avantages dans une application autre que Dotclear.
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())
Commentaires
Quand on y pense utiliser clearbricks dans d'autres projets peut s'avérer très utile.
Très bon exemple ;-)
ps: Je suppose que tu va aussi en faire avec d'autre partie de clearbricks
Je me suis intéressé aux connexions à la base de données avec Clearbricks car c'est ce dont je me suis le plus servi et donc ce que je connais le mieux. Les autres fonctions ont des usages plus spécifiques, alors que les connexions aux bases de données sont utiles dans un grand nombre de logiciels, pour Dotclear ou en PHP. Je n'ai pas prévu d'écrire d'autres guides pour Clearbricks.