CLASS MYSQL (FLOPTWO)

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015 - 9 mai 2007 à 12:00
Naixn Messages postés 455 Date d'inscription mardi 17 septembre 2002 Statut Membre Dernière intervention 22 juillet 2007 - 10 mai 2007 à 11:01
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/42634-class-mysql-floptwo

Naixn Messages postés 455 Date d'inscription mardi 17 septembre 2002 Statut Membre Dernière intervention 22 juillet 2007
10 mai 2007 à 11:01
http://www.php.net/~derick/meeting-notes.html#move-ereg-to-pecl
> Les expressiosn régulières POSIX (eregi, etc.) seront "deprecated" dans PHP6. De toute façon, rien d'étonnant, c'est moins perfomant et moins puissant que PCRE =) (les fonctions preg_*)

Juste pour info aussi :
Bien loin de moi l'idée de vous contredire sur le principe, mais PDO ne fonctionne pas par itérateurs, et renvoi bel et bien un tableau de données.

Je ne dis pas que c'est bien, mais PDO n'est pas non plus à cracher dessus, même s'il est loin d'être une référence.

De toute façon le mieux à faire, ça serait de coder tout ça en extension C :p
(A condition de bien coder en C bien évidemment...)
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 mai 2007 à 20:29
Ah ouais, mais j'ai fais nuit blanche alors j'ai pas tout lu :D
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
9 mai 2007 à 14:27
Si tu lis mon premier commentaire c'est exactement ce que je dis FhX... le second commentaire intervient sur la façon de faire en l'occurrence renvoyé un boléen à la place d'un tableau si la requête ne renvoie rien... .. .

@ tchaOo°
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
9 mai 2007 à 13:22
"if (mysql_num_rows($query) > 0)
{
while(false !($row mysql_fetch_assoc($query)))
$array[] = $row;
}
"
A partir du moment où on se retrouve à faire ca, c'est qu'on a pas compris l'intérêt d'une classe SQL.

Au lieu de faire ce genre de truc moche, c.a.d. de parcourir les enregistrements MySQL pour les mettre dans un tableau, puis renvoyer ce tableau, puis le (re)parcourir pour faire de l'affichage... Il existe un moyen plus rapide, mais cependant plus dur à comprendre ==> les itérateurs.

De toute facon, à partir du moment où tu parcours des données dans une classe SQL, c'est qu'il y a une erreur.



La classe SQL n'est la que pour faire un lien entre le serveur SGBD et ton projet... certainement pas pour mettre en forme les données SQL dans un tableau.
Ca, c'est en dehord de ta classe que ca se passe !
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
9 mai 2007 à 12:06
Je rajouterais que...

$mysql_num_rows = mysql_num_rows($query);
if ($mysql_num_rows == 0)
{
$array = false;
}
elseif ($mysql_num_rows > 0)
{
while($row = mysql_fetch_assoc($query))
{
$array[] = $row;
}
}

Si MySQL ne te renvois pas de résultat tu renvois false... donc si tu passe ton résultat dans une boucle ça risque de coincer... autant faire...

if (mysql_num_rows($query) > 0)
{
while(false !($row mysql_fetch_assoc($query)))
$array[] = $row;
}

Comme ça si MySQL ne renvoie pas de résultat tu récupère un tableau vide ce qui est plutot logique... .. .

Sinon ta méthode query() renvoie toujours true dans le cas d'un INSERT ou d'un DELETE même si MySQL à eu un problème et t'a renvoyée false... .. .

@ tchaOo°
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
9 mai 2007 à 12:00
Comme je l'ais dit pour une autre source... concernant mysql je ne vois pas l'intérêt d'encapsuler les fonctions native de php si c'est juste pour y ajouter un timer lors de l'exécution de la requête... s'il faut développer un classe SGDB autant faire une classe d'abstraction sinon c'est de la perte de performance pour rien... mieux vaut faire du procédural dans ce cas là... .. .

Sinon le coup de l'expression rationelle dans query() c'est bof bof... tu perd du temps pour rien... autant externaliser le traitement du résultat via des méthodes dédiées à ça... en plus tu fais deux eregi pour savoir si c'est un SELECT... .. .

De même il ne faut pas que ta méthode query() ferme la connection à la base de données sinon tu est obligé de réouvrir la connection à chaque requête et comme ta méthode query() n'ouvre pas la connection tu es carrément obligé d'instancier un nouvel objet à chaque requête... .. . Ô_o

@ tchaOo°
Rejoignez-nous