CLASSE SQL

cs_dorian91 Messages postés 41 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 15 mars 2009 - 2 août 2009 à 02:57
chris188 Messages postés 6 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 11 août 2008 - 17 août 2009 à 14:35
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50392-classe-sql

chris188 Messages postés 6 Date d'inscription mercredi 8 février 2006 Statut Membre Dernière intervention 11 août 2008
17 août 2009 à 14:35
Peut être ceci pourrait servir dans l'execute...

Magique les 6 premiers caractères d'une requête pour savoir combien au lieu de les compter.

switch (substr(strtolower($req),0,6)) {
case 'select':
//Combien ?
$ret["_Nb"]=mysql_num_rows($rq);
break;
case 'insert':
//Autoincrement ?
$ret["_Id"]=mysql_insert_id($rq);
case 'update':
case 'delete':
//Affected rows ?
$ret["_Nb"]=mysql_affected_rows($rq);
break;
default:
break;
}

Très bien ta source,
bonne continuation

Bravo Sneezy :)
cs_sneezy Messages postés 15 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 16 novembre 2012
10 août 2009 à 22:06
Bonjour Dorian91.

Loin de moi l'idée de lancer une polémique ici, mais comme l'a très bien expliqué Maître Akhénathon, l'abstraction de la base de données existe bel et bien.

Par ailleurs, comme je l'ai dit précédemment, PDO n'est malheureusement pas disponible chez tous les hébergeurs, même ceux qui proposent MySQL en standard dans leur offre, et certains (comme AMEN pour n'en citer qu'un pour l'exemple) ne savent pas le paramétrer correctement, ce qui rend son usage parfois impossible.

Utilisateur (entre autre) de ce fournisseur, j'ai été moi-même amené à écrire une classe pour mes propres besoins utilisée avec certains sites hébergés chez eux.

Enfin, je trouvais que votre post était vraiment "sec" pour ce nouveau contributeur, ce qui ne peut que l'encourager à ne plus partager ses codes, ce qui est à l'inverse de ce qui semble être le but de ce site.

A mon sens, et sans vouloir nullement vous offensé, je pense que si vous n'avez rien de plus positif à apporter dans un post de ce genre, y compris sous forme de critiques objectives, il est alors plus sympa de ne pas contribuer.

A mon avis, les utilisateurs des codes qui sont proposés sont suffisamment fins pour savoir s'il est intéressant ou non d'utiliser ce qui est proposé sans que l'on soit obligé de "tacler".

J'espère ne pas vous avoir choqué ni blessé par ma franchise car même si la référence à PDO était intéressante à faire, il me semble que cela pouvait être fait de manière plus sympatique.

Just my 2 cents.

Sneezy.
cs_dorian91 Messages postés 41 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 15 mars 2009
9 août 2009 à 23:50
Salut Sneezy

Je ne vois pas en quoi mon commentaire est a coté de la plaque.
Pour moi il n'y a pas de gain a utiliser cette source car elle n'apporte pas de fonctionnalités supplémentaires ou un meilleur confort d'utilisation.
J'ai cité PDO qui est quand même largement répandu chez les hébergeurs (très souvent il y a au moins le pilote pour mysql).
De plus il n'est pas plus difficile de se servir de PDO que de cette classe

$oDb = new myDB();
$oDb->Connect('localhost', 3306, 'root', '', 'test');
$oDb->Query('SELECT truc FROM machin;');
print_r($oDb->myResult);

$oPdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$oStmt = $oPdo->query('SELECT truc FROM machin;');
print_r($oStmt->fetchAll());

Je ne vois vraiment pas en quoi c'est plus difficile.

A plus
cs_sneezy Messages postés 15 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 16 novembre 2012
7 août 2009 à 12:46
Au fait, au sujet des connexions permanentes ou non, c'est un choix difficile à prendre car en fait tout le monde ne bénéficie par d'une liaison internet à haut débit. En ce qui me concerne, n'ayant pas la possibilité d'avoir l'ADSL la où je réside, je suis contraint d'utiliser une clef 3G+ avec un débit très limié et des coupures très fréquentes. Une petite amérioration de ton code serait donc de pouvoir choisir par un paramètre passé à l'objet si l'on veut établir une connexion pemanente ou si l'on doit se reconnecter à chaque requête.
cs_sneezy Messages postés 15 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 16 novembre 2012
7 août 2009 à 12:37
Bonjour Benjy.

Rien de plus à ajouter à ce que dit Akhénathon.

A priori ce site est destiné aussi bien aux débutants (dont moi) qu'aux Gourous trop souvent avides de remarques un peu trop acerbes et acides, même si certaines sont peu ou prou justfiées ou parfois complètement à côté de la plaque (comme c'est le cas ici pour les 2 premiers posts).

Donc, bravo pour l'effort de partager ton code, surtout si tu y apportes les quelques corrections nécesaires.

Bon courage.

PS: Au fait, PDO n'est pas disponible sur tous les serveurs ni même chez tous les ISP (voir même quand il est correctement implémenté)!
cs_aKheNathOn Messages postés 575 Date d'inscription dimanche 23 décembre 2001 Statut Membre Dernière intervention 23 octobre 2012
3 août 2009 à 10:35
Salut Benjy,

Source simpliste mais orientée objet, l'abstraction de la base de données y est car l'utilisateur de la classe n'écrit pas directement des appels vers mysql_*.

C'est vrai que la classe n'utilise que mysql comme moteur et n'en propose pas d'autres mais cela correspond à + de 90% des bases utilisées avec PHP.

En tant que niveau initié cela répond à un besoin de simplicité du débutant lambda qui n'a pas forcément envie de jouer avec des itérateurs ou du PDO.

Le seul hic c'est éventuellement l'execute et query qui refont des connections à chaque fois, peut-être faire ceci :

Quand tu utilises connect :
$this->db = mysql_select_db($this->myBase);

Et quand tu executes une requette :
mysql_query($sql, $this->db);

Ca évitera de refaire une connexion à la base, même si elle est persistante en dehors du script, ça te fera toujours perdre 5ms par connexion.

Bonne continuation,
akh
astro53 Messages postés 48 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 5 août 2009
3 août 2009 à 08:41
Salut MangaII
Va donc voir le lien de Dorian91 sur la PDO et utilise le persistent et meme le prepare. C est exactement ce qu il te faut.
A bientot
Astro
MangaII Messages postés 129 Date d'inscription dimanche 9 décembre 2001 Statut Membre Dernière intervention 12 janvier 2009
3 août 2009 à 08:33
Salut !

Je suis bien d'accord avec mes prédécesseurs ...
Je rajouterai juste une chose, je pense qu'en terme de performances, le fait de reconnecter et de ferme la connexion de la base à chaque requête fait une grosse perte de temps. En plus, ça génère beaucoup de connections (parallèles dès qu'il y a plusieurs clients), étant donnée qu'on utilise rarement une seule requête par page, je trouve dommage que ta fonction "connect" ne se connecte pas et garde la connexion ouverte.

A+
Nico
astro53 Messages postés 48 Date d'inscription jeudi 18 octobre 2007 Statut Membre Dernière intervention 5 août 2009
2 août 2009 à 12:30
Salut BenjyCorp,
Juste en lisant ta sources je dirais qu il y a quelques point a revoir.
Premierement dans ta function Connect, il n est pas necessaire de verifier l'existence des differents parametre vu qu aucun n est identifier comme null, donc si tu n as pas mis le bon nombre de parametre ca te renverras automatiquement une erreur, sauf si ta reel intention etait de preciser quelles parametre sont errones.
Deuxiemement dans tes functions Query et execute. Ici tu devrais verifier la presence de donner dans tes variables de connection.
A la place de ceci $this->myRowCount+=1 tu peut aussi ecrire myRowCount++ ca te fera gagner 2 octets!
Voila mes conseils si tu veut ameliorer ta source.

PS: CPCPC tu as peut etre raison dans ce que tu dis mais moi je ne connais que mysql je ne sais pas me servir de PDO ou de mysqli, je me suis fais une classe mysql pour mes sites et c est pratique...

PS: Dorian91 Merci pour le lien je regarde tout de suite.
A bientot
Astro
cs_cpcpc Messages postés 4 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 18 décembre 2008
2 août 2009 à 11:48
'mysql_' est le connecteur historique, écrire une classe avec est aussi utile et relevant que de vouloir réparer une mégane avec des pièces de 4L... mysqli est orienté objet, même s'il est utilisable en mode procédural, sinon il y a effectivement PDO, 'mysql_' n'est conservée qu'à des fins de compatibilité. Tente plutôt de développer une couche d'abstraction qui te serve dans tes développements (par exemple), là tu as perdu du temps à réinventer la roue.
cs_dorian91 Messages postés 41 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 15 mars 2009
2 août 2009 à 02:57
Salut benjycorp

Je ne vois pas l'intérêt de ta source...
Il n'y a pas d'abstraction de base de données, tu recode les fonctions déjà existantes en n'y apportant rien de plus.
As tu regardé du coté de PDO (cf lien : http://fr.php.net/manual/fr/book.pdo.php).

Bonne prog
A plus
Rejoignez-nous