Karedas.net: Couleur 45° sans essorage

Ma classe php d’accès à mySQL

Depuis que je programme, je suis avare de mes frappes sur le clavier et adepte de la factorisation.  Je me ,suis donc, comme beaucoup de programmeurs, fais ma propre classe d’accès à mySQL qui réduit au maximum les lignes de code lors de requetes.

PHP

Vous pouvez visualiser la classe icifiles.karedas.net.

Pour l’instancier, rien de miraculeux, un include et hop:

//avec les données de connexion par defaut
//que vous aurez pris soin de modifier dans la classe
 
$mysql = new kare_mysql();
 
//avec des données de connexion spécifiques
 
$mysql = new kare_mysql('ip','login','pass','base');

A partir de là plus besoin de gerer les connexions, ressources…

Exemple de requete classique:

$mysql->requete("select destrucs, etdesmachins from matable");
while($res = $mysql->fetch_object()) {
	echo $res->destrucs.' - '.$res->etdesmachins.'<br/>';
}

Pour gérer plusieurs requêtes en même temps, récupérez puis utiliser l’identifiant de la ressource:

$id = $mysql->requete("select destrucs, etdesmachins from matable");
while($res = $mysql->fetch_object($id)) {
	echo $res->destrucs.' - '.$res->etdesmachins.'<br/>';
}

Exemple d’une requête dont on sait à l’avance qu’elle ne renvoi qu’un résultat (un count(*) par exemple):

$res = $mysql->sqlunique("select count(*) from matable");

La même chose sur une requête ne renvoyant qu’une ligne de résultat, pourquoi gérer une boucle dans ce cas ?

$res = $mysql->sqlunique_object("select untruc, etunmachin from matable");
echo $res->untruc.' - '.$res->unmachin;

Pour savoir si une requête renvoi un résultat (vérifier par exemple si un utilisateur existe):

$mysql->sqlexiste("select * from users where userID = 'karedas'"); 
//renverra true ou false

Lors de la première requête envoyée, si aucune connexion n’existe, la connexion se fera automatiquement.

Lorsque que vous arrivez en fin de recordset, la ressource se libère automatiquement. Idem pour les requêtes à résultat unique, quand le résultat est renvoyé, il ne reste pas de trace des ressources.

La méthode free_all() vous permet de libérer toutes les ressources, et deconnect() parle d’elle même.

Pour aller plus loin, vous pouvez l’étendre sous la forme d’un singleton pour économiser l’instanciation. Ca et un autoload et vous aurez un accès instantané à mySQL où que vous vous trouviez dans votre projet.

  • Hello, juste pour info, il y a un objet dans les dernières versions de PHP qu’il serait peut-être plus intéressant d’utiliser ou du moins de surcharger.

    Après pour optimiser ton mysql existe, remplace * par count(*) automatiquement dans la requête par ex.

    @+

  • L’objet dont tu parle est probablement PDO, qui devient le standard en PHP6 (les extensions de base de données non PDO passant en PECL), et qui, en effet, est plus qu’intéressant à étendre.

    En effet un count(*) sera plus rapide, ce n’était là qu’un exemple, la requête en elle même étant indépendante du fonctionnement de la classe.

  • Bonjour,

    Super et merci pour votre class.
    Je débute en PHP et j’essaye de comprendre…
    Est-il possible grace à cette classe d’écrire qqch comme :

    fetch_object(’untruc’); ?>

    Ce qui éviterai d’avoir a refaire une requête ou une boucle. A moins que j’ai encore pas bien compris.

  • [code]
    echo $mysql->fetch_object('titre');
    [/code]

Vous pouvez suivre les commentaires pour cet article via ce flux RSS 2.0.