Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Base de données > SQL en POO sans prise de tête > Lecture des commentaires

SQL en POO sans prise de tête

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Pseudo Commentaire
Page : 1 
Hors ligne NoRBiUM # Posté le 28/08/2008 à 19:14:05 - Ce membre a mis la note : 11
Avatar
Groupe : Membres
Tuto moyen ...

A mon avis si on veut réellement apprendre la POO on doit passer par PDO.

Ce tuto est déjà meilleur : http://www.siteduzero.com/tutoriel-3-34790-pdo-interface-d-acces-aux-bdd.html. Et je précise qu'il n'y a aucune classe préparé.

De plus il me semble qu'avec php 6 les fonctions du type mysql_connect etc ... ne pourront plus être utilisés.

Pour conclure : Passer par PDO serait vachement plus utile et plus facile pour apprendre réellement la POO...
Hors ligne Matt1113 # Posté le 13/08/2008 à 14:42:15 - Ce membre a mis la note : 18
Vive la glandouille
Avatar
Groupe : Membres
Très bon tuto, facil à comprendre, complet pour quelqu'un qui ne fait pas de la grosse production.

18.

Suis-je éveillé ou dors-je?

http://webfly.fr
 
Hors ligne Le Zéro # Posté le 15/07/2008 à 16:02:09 - Ce membre a mis la note : 20
I'm a ZerO
Avatar
Groupe : Membres
Très bon tuto. Je ne comprends pas la note de 13 !
Vous n'êtes pas obligés de passer à Mysqli mais pour les sites ayant des architetures objet, c'est comme même très pratique.
Je note 20 pour remonter mais je pense qu'il vaut 17...

Avancement de mon site web, MyFrog.fr : ||||||||||

Le Zéro
 
Hors ligne Laurent # Posté le 08/07/2008 à 07:40:29 - Ce membre n'a pas mis de note
Avatar
Groupe : Membres
J'ai vu plus haut un commentaire qui demandait : exécuter plusieurs requete SQL dans une seule fonction, kossé ça donne? (traduction : ça sert à quoi?) Je peux donner un exemple que j'ai eu récemment à voir dans mon travail : Nous avions conçu un module d'approbation qui permettait à l'admin de pouvoir valider n'importe quelle modification au site. Pour ça, nous avons conçu un système qui stockait la requête dans la base de données (on stockait du SQL dans un champs texte) et on exécutait la requête lorsque l'admin appuyait sur le bouton "Autoriser". Pour les cas où il faut éxécuter plusieurs requête pour un seul update, c'est très pratique. Je pense notamment lorsque les données était dans plusieurs tables, par exemple quand un utilisateur mettais à jour ses styles musicaux favoris (table de jointure) et son adresse (table d'utilisateur). Sinon il faut plusieurs manipulation ésotérique de chaine de caractère (explode avec ; et vous êtes mieux de priez pour que votre utilisateur n'ait pas mis de ; quelque part dans ses infos) pour pouvoir exécuter toutes les dites requêtes... Ce n'est pas impossible, loin de là, mais quand on il faut remettre le projet le lendemain sinon le boss vous engueule, disons qu'on préfère les trucs simples et rapides.

Sinon, en ce qui a trait au tuto, je suggérais un ajout : une petite le pattern Singleton. C'est tellement vital (en tout cas pour moi ce l'est, je ne sais pas pour les autres) quand on travaille avec les objets représentant les bases de données. Surtout quand on est rendu au plus profond de nos objets de couche Business Logic et qu'il faut passer éternellement dans chaque constructeur de CHAQUE objet une référence vers ce ****** d'objet mysqli. Alors que quand on a juste à faire $sql = YouyouxMysqli::instance() pour obtenir notre objet, c'est tellement plus agréable. Je me rappelle que je pleurais de joie quand je l'ai appris tellement je suait pour faire du code orienté objet avec Mysqli. (Youyoux, c'est le nom du site Web sur lequel on boss, mais je ne le vous recommande pas trop pour l'instant...)

J'aurais personnellement lancé une exception en cas d'erreur, mais je reconnais que c'est loin d'être tous les zéros qui savent ce que c'est

J'aimerais finir en ajoutant qu'il y a l'objet PDO fait également un excellent remplacement de Mysqli si vous voulez vraiment une abstraction de la base de données. Vous aurez probablement à réécrire les requêtes SQL anyway à cause des différences de syntaxe entres les bases de données, mais il retourne de sympathiques objet PDOStatement qui pourront être envoyés sans encombre vers vos autres classes (si le coeur vous en dit). Il suffira de placer toutes vos requête dans des classes sans état dans une couche "DataLink" qui ne s'occupe que de faire les requête et de retourner les PDOStatement. Ensuite vos objets de Business Logic peuvent utiliser les dits PDOStatement pour créer leur état. Assez pratique, très orienté objet et très flexible. Si on change de système de base de données, il suffit de créer une nouvelle implémentation de vos interface mais avec des requêtes fait pour le nouveau système. Et comme vos PDOStatement resteront les mêmes, tout sera bien dans le meilleur des mondes.

Be kind, for everyone you meet is fighting a hard battle. (Platon)

Laurent
 
Hors ligne SpaceFox # Posté le 07/07/2008 à 22:17:36 - Ce membre n'a pas mis de note
Ton code existe deja, en mieux
Avatar
Groupe : Membres
Sois un minimum honnête, si y'a des imprécisions signale-les correctement (et tu es capable de le faire, tu l'as fait) ; si le tuto ne te plaît pas parce que ce n'est pas ce que tu voulais et qu'il ne correspond pas à ta manière de coder, ben c'est pas la peine de te plaindre.
De là à dire que c'est inutile... je peux te certifier le contraire, si tu savais les horreurs que j'ai vu (et en entreprise, et en production).

Image utilisateur
Image utilisateur

Image utilisateur
 
Hors ligne Kazou_ # Posté le 07/07/2008 à 20:59:17 - Ce membre a mis la note : 3
Groupe : Membres
Afin d'éviter de finir dans un dialogue de sourd, je vais éviter d'enfoncer le clou.
Ayant de profonds désaccordes avec ta manière de pensé et n'ayant pas envie de t'agresser pour autant, je caractériserais simplement ton tutoriel de : "aussi inutile d'imprécis, je ne le recommanderais pas".
Hors ligne SpaceFox # Posté le 07/07/2008 à 12:55:02 - Ce membre n'a pas mis de note
Ton code existe deja, en mieux
Avatar
Groupe : Membres
Citation : Alp
Des fautes de langage, des imprécisions (voir des erreurs), bref vas relire des cours/documentations/articles et reviens écrire ensuite.
Le tuto a été corrigé, re-corrigé et z-corrigé ; je veux bien les fautes de langages restantes.
Evidemment, c'est facile de dire qu'il y a des fautes / erreurs / imprécisions sans donner lesquelles, mais je suppose que tu as trop à faire pour me signaler lequelles afin que je puisse les corriger ? Parce que si elles sont là, c'est que je ne les ai pas vues.

Citation : Kazou
A la vue du titre du tutoriel (désolé je ne peut pas parler de cours)
Ça tombe bien, je n'ai pas fait un cours mais un tutoriel. Je voudrais faire un cours, je le ferais pas ici, sur ce site, pour commencer.

Citation : Kazou
Ici on ne parle que de fonctions de base qui n'apporte rien par rapport à l'extension mysql.
PHP précisait qu'on était sensé utiliser MySQLi et plus MySQL (l'extension), c'est une raison suffisante en soi.

Citation : Kazou
Le rôle d'un SGBD étant le contrôle d'intégrité il peut s'avérer que ce contrôle soit trop strict et bloquant dans nos actions. On utilise alors les transactions afin de valider (commit) les opérations d'une seule traite sans contrôle intermédiaire. Il n'y a donc strictement aucun rapport avec la couche d'accès aux données (ici mysqli).
? Pardon ? Je vois pas le rapport entre ta phrase et mon tuto. À moins que tu ne fasse allusion à la conclusion ? Essaie de balancer une transaction avec l'extension standard, tu verras le problème (et si ça marche, je veux bien la config serveur).

Citation : Kazou
Ce n'est pas parce qu'on s'adresse a des débutants qu'on doit se permettre de faire des amalgames de tout, au contraire.
Comment prétendre donner les bases a quelqu'un avec des abus de langages ou en tenant des propos plus que flou ?
Eh bien, tu me montres ces amalagmes que je puisse les corriger ?

Citation : SpaceFox
Citation : SpaceFox
Oui. Le reste se fait exactement comme vous le faisiez avec la bibliothèque SQL « standard ».

Connait pas
Là, tu m'excusera mais ce genre de commentaire est du foutage de gueule intégral.

Citation : Kazou
Citation : SpaceFox
Dans certains cas, ce qui était une fonction devient un attribut, et non pas une méthode. Donc, si vous laissez les parenthèses à la fin du nom, ça buggera, et le message d'erreur n'est pas très clair.

Comprend pas
Désolé, mon grand, j'arrive pas à trouver plus clair comme phrase.
D'un autre côté, tu dois être un peu con pour ne pas comprendre ça alors que ça a été validé, donc compris, et que personne d'autre ne s'est plaint avant toi.
Remarque, si tu la prends hors contexte, c'est normal, cette pharse s'intègre dans un paragraphe, qui aide fortement à la comprendre.

Citation : Kazou
Citation : SpaceFox
J'aimerais que ceux qui n'ont pas aimé (y'en a vu la note) m'expliquent, que je puisse améliorer

Dans ce cas évite de parler de ce que tu ne connait pas.
Je crains que ton commentaire ne soit en grande partie nul et non avenu, vu que tu commence à te plaindre que le tuto n'est pas sur le sujet que tu veux. Eh bien si tu veux un tuto sur le mapping relationnel-objet, ben tu le fais, toi. C'est pas du tout l'objet de mon tuto.

Allez, une fois pour toute, en gros et en rouge parce qu'apparemment y'en a qu'on du mal.

Ce tuto a été fait pour deux raisons principales.

1- Parce qu'il existe une profusion énorme de tutos sur le thème « utilisez SQL en POO » et qui proposent des classes « maison », ce qui est ridicule parce que c'est ré-inventer la poudre dans 80 % des cas. Quitte à faire ses connexions SQL en POO, autant le faire correctement.
2- Parce que PHP précisait que l'extension MySQL devait être remplacée par MySQLi.

Maintenant, ils ne le précisent plus aussi clairement, et de toutes façons les deux extensions devraient être remplacées dans PHP6, mais avant qu'on le voie sur les hébergeurs, celui-là...

Donc, arrêtez de faire chier avec « bahhh, on voit pas de fonctions avancées », ou « T'es une merde, tu donnes pas de bons arguments pour utiliser ton truc ».
Ce n'est pas le sujet du tuto. C'est tout. Point final.


Pour finir, un point pour Kazou, effectivement ma phrase sur les guillemets n'est pas claire, je connais parfaitement la différence (et c'est pour ça que j'utilise les guillements simples, d'ailleurs), c'est que dans mes exemples que ça change rien.
Je rends la phrase plus claire.

Image utilisateur
Image utilisateur

Image utilisateur
 
Hors ligne Kazou_ # Posté le 06/07/2008 à 03:30:44 - Ce membre a mis la note : 3
Groupe : Membres
Bonjour

Citation : SpaceFox
ce tuto part du principe que vous voulez faire du SQL en utilisant la POO, c'est même le sujet.

Si c'est faire de la POO pour faire de la POO ça ne sert strictement à rien.

A la vue du titre du tutoriel (désolé je ne peut pas parler de cours), je m'attendais à ce qu'on aborde des notions comme le mapping relationnel-objet qui propose une conception objet permettant d'apporter une véritable valeur a la conception d'une application.

Ici on ne parle que de fonctions de base qui n'apporte rien par rapport à l'extension mysql.
Le rôle d'un SGBD étant le contrôle d'intégrité il peut s'avérer que ce contrôle soit trop strict et bloquant dans nos actions. On utilise alors les transactions afin de valider (commit) les opérations d'une seule traite sans contrôle intermédiaire. Il n'y a donc strictement aucun rapport avec la couche d'accès aux données (ici mysqli).

Ce n'est pas parce qu'on s'adresse a des débutants qu'on doit se permettre de faire des amalgames de tout, au contraire.
Comment prétendre donner les bases a quelqu'un avec des abus de langages ou en tenant des propos plus que flou ?

Citation : SpaceFox
Oui. Le reste se fait exactement comme vous le faisiez avec la bibliothèque SQL « standard ».

Connait pas

Citation : SpaceFox
Dans certains cas, ce qui était une fonction devient un attribut, et non pas une méthode. Donc, si vous laissez les parenthèses à la fin du nom, ça buggera, et le message d'erreur n'est pas très clair.

Comprend pas

Citation : SpaceFox
J'aimerais que ceux qui n'ont pas aimé (y'en a vu la note) m'expliquent, que je puisse améliorer

Dans ce cas évite de parler de ce que tu ne connait pas.





Au passage je voudrais souligner :

Citation : SpaceFox
J'utilise des guillemets simples (') pour délimiter mes chaînes de caractères, mais rien ne vous empêche d'utiliser les guillemets doubles (") si vous préférez, c'est pareil !

Ce n'est pas parce que dans tes exemple ça ne changerait rien que c'est strictement la même chose.
Met toi à la place de quelqu'un qui attaque la programmation web avec php (de tout façon je ne voit pas à quel autre public ce tutoriel pourrait s'adresser), a tous les coups il pensera que ' est strictement équivalent a ". Et c'est a cause de ce genre de tutoriel ou l'on retrouve des concaténation barbar en plein milieux des codes sources.

Avant d'enseigner apprend : http://pbnaigeon.developpez.com/tutori [...] he-guillemet/

Bonne chance ...
Hors ligne Alp # Posté le 06/07/2008 à 02:44:38 - Ce membre n'a pas mis de note
Groupe : Membres
Des fautes de langage, des imprécisions (voir des erreurs), bref vas relire des cours/documentations/articles et reviens écrire ensuite.
 
Hors ligne Elwood_Brothers # Posté le 05/07/2008 à 23:26:02 - Ce membre n'a pas mis de note
2+2=5 XD
Avatar
Groupe : Membres
J'ai bien aimé ton tuto, surtout le fait qu'il soit un bel exemple de ce que l'on peut faire en POO avec PHP (ce qui restait assez floue pour moi).
Je ne te mettrai néanmoins pas de note, n'ayant pas assez de connaissance en ce domaine pour juger.
Merci.

Image utilisateur
 
Hors ligne Pixool # Posté le 30/06/2008 à 09:42:15 - Ce membre a mis la note : 18
Graph & Prog
Avatar
Groupe : Membres
merci pour ce tutoriel très intéressant surtout sur la partie de la gestion des erreurs ;)
Hors ligne SpaceFox # Posté le 22/05/2008 à 22:15:20 - Ce membre n'a pas mis de note
Ton code existe deja, en mieux
Avatar
Groupe : Membres
Le pire, c'est que moi non plus je suis pas fan de la POO en PHP (vu que par le concept de script, la plupart des objets ne servent qu'avec une instance, c'est un peu crétin).
Ou alors, faut avoir un vrai gros projet pour que ça soit intéressant.

Mais le concept était que tant qu'à faire de la POO en PHP, autant le faire correctement...

Image utilisateur
Image utilisateur

Image utilisateur
 
Hors ligne zancdar # Posté le 15/05/2008 à 16:57:35 - Ce membre n'a pas mis de note
Va donc te faire fouetter
Avatar
Groupe : Bannis
Hum créer un objet juste pour des requêtes oO

J'ai jamais été fan de la POO en PHP... quoi que MYSQLi parrais interessant, je ferais des tests plus tard.

LEPV

 
Hors ligne WaR TeaM # Posté le 11/03/2008 à 17:48:06 - Ce membre a mis la note : 20
La mort doit être vécu !
Avatar
Groupe : Membres
Merci pour ce tuto ;)

Un petit 20 pour faire remonter la moyenne :D

1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20

Codeur PHP/SQL
Image utilisateur
 
Hors ligne rocawear # Posté le 05/03/2008 à 10:28:40 - Ce membre a mis la note : 20
WebDev - Développeur web
Avatar
Groupe : Membres
Bonjour,
J'ai très apprécié ce tutoriel pour le développement de mon nouveaux projet ;)

20/20

Merci beaucoup :p

Apprenez a lire la doc s.v.p! :-°
 
Hors ligne SpaceFox # Posté le 03/03/2008 à 00:45:01 - Ce membre n'a pas mis de note
Ton code existe deja, en mieux
Avatar
Groupe : Membres
J'aimerais que ceux qui n'ont pas aimé (y'en a vu la note) m'expliquent, que je puisse améliorer :colere2:

Sinon, pour clore le débat une bonne fois pour toute : ce tuto part du principe que vous voulez faire du SQL en utilisant la POO, c'est même le sujet.
Après, on peut disserter et même faire un tuto sur la meilleur manière d'accéder à SQL (en fonction des besoins, etc) ; mais là c'est un autre débat.
Edit : débat certes intéressant, mais sur un topic dédié. Si quelqu'un est motivé...

Image utilisateur
Image utilisateur

Image utilisateur
 
Hors ligne Anonyme # Posté le 29/02/2008 à 23:32:39 - Ce membre n'a pas mis de note
Groupe :
Merci de la précision pour les procédures stockées. ^^

Pour PDO par contre, bof, c'est vraiment foireux aussi ce truc.
Déjà, ça ne change rien au problème de la syntaxe qui varie (un peu ou beaucoup) entre les différents SGBDR, ce qui fait qu'au final, même en utilisant PDO, il y a de grandes chances de devoir se retaper une bonne partie des requêtes.
Ensuite, PDO souffre du même autre défaut que toutes les couches d'abstraction SQL : les spécificités des SGBDR. Ce que l'on fait en une requête X sur un SGBDR se fera peut-être en trois requêtes U, V et T sur un autre, ce qui fait qu'au final on devra encore tout revoir.

Personnellement, je trouve que la meilleure chose à faire pour passer aisément d'un SGBDR à un autre est d'abstraire complètement la couche des données (incluant la récupération, l'insertion, etc.).
Bien sûr avec cette méthode on devra également réécrire cette couche, ce qui est aussi chiant qu'avec PDO et les autres couches d'abstractions SQL.
Toutefois, il y a deux avantages que je trouve majeurs :
- Comme on sépare la couche des données du restes, on peut changer cette couche sans aucun impact sur tout le reste du code puisque la couche des données envoie des structures (array, objet, type primitifs) utilisable directement par PHP et indépendant de tout SGBDR.
- C'est plus honnête, on ne prétend pas qu'on peut abstraire les SGBDR, ce qui est impossible à faire complètement, y aura toujours un SGBDR pour faire chier.

Abstraire cette couche permet même de passer de l'utilisation d'un SGBDR à l'utilisation de fichiers sans demander aucune modification sur le reste du code.

[Au passage, j'ai pas mis de note à ton tuto. Les tutos évoluent, pas les notes, les notes ne veulent donc rien dire]
Hors ligne Draeli # Posté le 29/02/2008 à 21:48:22 - Ce membre n'a pas mis de note
Avatar
Groupe : Membres
Alors il faut savoir que les procédures stockés marchent avec l'extension mysql MAIS ne sont pas supportés selon la syntaxe commune (on ouvre pas de bloque comme en tant normal) donc si ca reste effectivement possible c'est à éviter car difficilement portable par la suite (et de toute façon trés mal géré au niveau des pointeurs internes des méthodes de lecture même si cela reste possible en bidouillant).

Pour les transactions, l'extension mysql les gèrent tout à fais correctement, par contre faut il encore utiliser un moteur de stockage qui lui supporte les transactions :)

La documentation PHP comme celle de MySQL comportent de rares erreurs voir des contres sens, malheureusement on ne peut rien y faire sinon tester par soit même pour ce rendre compte de ce qui marche réellement en cas de doute. Dans ce cas je pense que la tournure de la phrase induit en erreur. Pour ma part, à pars les procédures stockés ou je dois bidouiller, tous le reste semble marcher correctement avec l'extension mysql.

Pour les requêtes multiples, on obtient la même chose avec des transactions, sachant que l'optimisation des requêtes est soumis aux configurations côté serveur et drivers de la base de données donc même si en théorie faire des transactions permet d'optimiser, ca n'est pas une véritée à 100% (même si pour ma part je le considère dans les faits quasi comme tel).

Pour en revenir au tuto, même si l'extension mysqli a le mérite d'exister, l'avenir est à l'extension PDO qui est une couche d'abstraction au base de données (à savoir qu'on ne s'occupe plus de savoir derrière quel SGBD est derrière, on fait simplement les requêtes et le drivers du SBGD fait les adaptations (ca c'est pour la théorie car dans les faits ca pose quand même pas mal de soucis ... )).

Indépendant : Jedi PHP (Certifié Zend PHP) - Jedi MySQL (Certifié MySQL Core) - Jedi CSS
Le côté obscur de la force bientôt rejoins ai-je ! :-°
- A bove ante, ab asino retro, a stulto undique caveto -
 
Hors ligne Anonyme # Posté le 28/02/2008 à 20:47:54 - Ce membre n'a pas mis de note
Groupe :
Citation : SpaceFox
Citation : Haku

Ce n'est pas propre à MySQLi, toutes les couches d'abstractions SQL permettent cela.

Merci de ne pas me faire dire ce que ne n'ai pas dit.
En l'occurence, je ne dis pas que seul MySQLi peut le faire, mais que MySQLi peut le faire et pas MySQL (grâce à la gestion type "objet").

Ai-je dit que tu avais dit cela ?
J'ai juste commenté.
Et ce n'est pas grâce au modèle Objet qu'on peut faire cela, c'est uniquement dû à l'abstraction, on peut très bien arriver au même résultat avec des fonctions.

Citation : SpaceFox
Citation : Haku
Et cette remarque dans la doc est bien stupide. Les fonctions mysql_*() permettent d'utiliser toutes les possibilités de MySQL et ce même si c'est une version plus récente que 4.1.0..

Si on commence à partir du principe que la doc est fausse...
Je ne suis pas certain (mais j'ai la flemme de vérifier) que l'extension MySQL peut vraiement gérer les histoires de transactions ou de procédures stockées correctement (en particulier le problème de délimiteur). Tout ceci serait à tester

Je ne dis pas que la doc est fausse, je dis qu'elle est parfois assez légère dans ses affirmations et que certaines phrases ont une fâcheuse tendance à mal se faire comprendre, comme celle qui parle du non-support des fonctions de MySQL >= 4.1 avec l'extension MySQL.
Pour les transactions, je peux t'assurer que ça fonctionne :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2.  
  3. //mysql_query('create table t (t int) engine = innodb');
  4.  
  5. var_dump(mysql_result(mysql_query('select count(*) from t'), 0));
  6. mysql_query('start transaction');
  7. mysql_query('insert into t(t) values(1)');
  8. var_dump(mysql_result(mysql_query('select count(*) from t'), 0));
  9. mysql_query('rollback');
  10. var_dump(mysql_result(mysql_query('select count(*) from t'), 0));
  11.  
  12. ?>

Sortie :
Code : Console - Afficher / masquer les numéros de ligne
string(1) "0" string(1) "1" string(1) "0"

Par contre pour les procédures stockée, je n'arrive à rien d'autre qu'une erreur de syntaxe tant avec l'extension MySQL que l'extension MySQLi.
Code : SQL - Afficher / masquer les numéros de ligne
  1. delimiter //
  2. CREATE procedure test (out param1 int)
  3. begin
  4.     SELECT count(*) INTO param1 FROM t;
  5. end;
  6. //
  7. delimiter ;
  8. call test(@a)
  9. SELECT @a; -- sortie : 0, OK (table vide)

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2.  
  3. mysqli_multi_query($a, '
  4. delimiter //
  5. create procedure test (out param1 int)
  6. begin
  7.    select count(*) into param1 from t;
  8. end;
  9. //
  10. delimiter ;
  11. call test(@a)') or exit(mysqli_error($a));
  12.  
  13. var_dump(mysqli_fetch_assoc(mysqli_query($a, 'select @a')));
  14.  
  15. // Sortie : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'delimiter // create procedure test (out param1 int) begin select count(*)' at line 1


Citation : SpaceFox
Citation : Haku
Si le zéro de base ne sait pas ce qu'est une transaction, ce n'est pas ce que la doc de MySQLi en dit [...] qui l'aidera à savoir ce que c'est, et encore moins à savoir l'utiliser.

Si le zéro ne de base ne sait pas ce qu'est une transaction, il va cherche dans la doc de MySQL (le serveur, pas l'extension PHP) ou mieux, sur des cours de SQL ce que c'est.
Vu qu'une transaction est une commande SQL, il n'y a pas de raison de trouver ça dans la doc PHP...

Mea culpa, j'ai mal interprété une de tes phrases.

Citation : SpaceFox
Citation : Haku
Je m'en doute bien, mais au final, MySQLi ne permet rien de plus que MySQL, c'est juste que cette extension offre plus de raccourcis.

Elle offre aussi la possibilité de faire des objets et tout ce qui va avec pour gérer SQL. C'est dans le titre.

Ce qui n'est pas spécialement utile vu ce que beaucoup (dont moi et ce tuto) en fait.

Citation : SpaceFox
Citation : Haku
Mais je ne vois toujours pas l'intérêt d'envoyer plusieurs requêtes en un seul appel


* Pour alléger / éclaircir certains codes
* Certaines requêtes ne marchent que si on ne les fait pas en une seule transaction (création de procédures stockées par exemple)

Tu peux me donner un exemple de code allégé/éclairci ?
Hors ligne SpaceFox # Posté le 28/02/2008 à 19:08:59 - Ce membre n'a pas mis de note
Ton code existe deja, en mieux
Avatar
Groupe : Membres
Citation : Haku
Ce n'est pas propre à MySQLi, toutes les couches d'abstractions SQL permettent cela.
Merci de ne pas me faire dire ce que ne n'ai pas dit.
En l'occurence, je ne dis pas que seul MySQLi peut le faire, mais que MySQLi peut le faire et pas MySQL (grâce à la gestion type "objet").

Citation : Haku
Et cette remarque dans la doc est bien stupide. Les fonctions mysql_*() permettent d'utiliser toutes les possibilités de MySQL et ce même si c'est une version plus récente que 4.1.0.
Si on commence à partir du principe que la doc est fausse...
Je ne suis pas certain (mais j'ai la flemme de vérifier) que l'extension MySQL peut vraiement gérer les histoires de transactions ou de procédures stockées correctement (en particulier le problème de délimiteur). Tout ceci serait à tester.

Citation : Haku
Si le zéro de base ne sait pas ce qu'est une transaction, ce n'est pas ce que la doc de MySQLi en dit [...] qui l'aidera à savoir ce que c'est, et encore moins à savoir l'utiliser.
Si le zéro ne de base ne sait pas ce qu'est une transaction, il va cherche dans la doc de MySQL (le serveur, pas l'extension PHP) ou mieux, sur des cours de SQL ce que c'est.
Vu qu'une transaction est une commande SQL, il n'y a pas de raison de trouver ça dans la doc PHP...

Citation : Haku
Je m'en doute bien, mais au final, MySQLi ne permet rien de plus que MySQL, c'est juste que cette extension offre plus de raccourcis.
Elle offre aussi la possibilité de faire des objets et tout ce qui va avec pour gérer SQL. C'est dans le titre.

Citation : Haku
Mais je ne vois toujours pas l'intérêt d'envoyer plusieurs requêtes en un seul appel
  • Pour alléger / éclaircir certains codes
  • Certaines requêtes ne marchent que si on ne les fait pas en une seule transaction (création de procédures stockées par exemple)


----------

Citation : Exorta
c'est à éviter quand on s'adresse à des zéros (comme c'est censé être le cas ;p); après ça peut donner du code non commenté, qui est illisible à la relecture.
J'ai supprimé les commentaires parce que je pense le bloc suffisemment clair pour être compris en ayant le détail juste au-dessus.

Et comme ça, ça évite que les zéros copient / collent bêtement du code sans rien y avoir compris. Là, s'ils veulent faire du code propre, ils referont leur truc en s'inspirant du mien, avec leur convention de nommage, leurs habitudes et leurs commentaires.

Image utilisateur
Image utilisateur

Image utilisateur
 
Hors ligne Anonyme # Posté le 28/02/2008 à 17:55:23 - Ce membre n'a pas mis de note
Groupe :
Citation : SpaceFox
Non, la première raison est que ça permet de faire un code beaucoup plus facile à modifier / maintenir après, notamment si on veut changer quelque chose au comportement SQL. Extrêmement pratique lors du développement et du debug.

Ce n'est pas propre à MySQLi, toutes les couches d'abstractions SQL permettent cela.
Citation : SpaceFox
La seconde raison, c'est celle donnée dans la doc PHP :
Citation : La doc PHP sur l'extension MySQL
Bien que cette extension MySQL soit compatible avec MySQL 4.1.0 et supérieur, elle ne supporte pas les fonctionnalités supplémentaires que cette version fournit. Pour cela, utilisez plutôt l'extension MySQLi.

Et cette remarque dans la doc est bien stupide. Les fonctions mysql_*() permettent d'utiliser toutes les possibilités de MySQL et ce même si c'est une version plus récente que 4.1.0.
D'ailleurs pour exploiter toutes les possibilités de MySQL on n'a besoin que de quelques fonctions :
  • mysql_connect(),
  • mysql_(unbuffered_)query(),
  • mysql_result(),
  • mysql_fetch_array()/assoc()/row()/object(),
  • mysql_data_seek(),
  • et mysql_real_escape_string().
Toutes les autres ne sont que des raccourcis, exemple :
  • mysql_select_db($db) -> mysql_query('USE ' . $db)
  • mysql_insert_id() -> mysql_query('SELECT LAST_INSERT_ID()')
  • mysql_list_db() -> mysql_query('SHOW DATABASES')
  • mysql_drop_db($db) -> mysql_query('DROP DATABASE ' . $db)
  • Etc.


Citation : SpaceFox
Toutefois, vu que le zéro de base ne sait pas ce que sont ces fonctionnalités supplémentaires...
Si le zéro de base ne sait pas ce qu'est une transaction, ce n'est pas ce que la doc de MySQLi en dit :
Citation : Doc sur mysqli_commit
mysqli->commit() — Valide la transaction courante

Qui l'aidera à savoir ce que c'est, et encore moins à savoir l'utiliser.

Citation : SpaceFox
En fait je suis en train de m'apercevoir que c'est la phrase qui n'est pas claire. C'est pas un argument pour utiliser MySQLi (vu que c'est la conclusion), c'est une démonstration de ses possibilités.

Je m'en doute bien, mais au final, MySQLi ne permet rien de plus que MySQL, c'est juste que cette extension offre plus de raccourcis.

Citation : SpaceFox
Pour ce qui est de grouper des requêtes, je ne sais pas avec mysql_*(), mais la syntaxe :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $objet_mysqli->query('REQUETE SQL 1;
  3.                     REQUETE SQL 2;');
  4. ?>

Ne fonctionne pas ou ne donne pas toujours les résultats attendus.

mysqli_query() ne permet pas non plus d'envoyer plusieurs requêtes, mais mysqli_multi_query() oui.
Et en effet, il n'y a pas de fonction toute faites pour MySQL, mais elle est relativement simple à faire.
Mais je ne vois toujours pas l'intérêt d'envoyer plusieurs requêtes en un seul appel, ce n'est pas comme si ça allait changer quoi que ce soit au temps nécessaire à l'exécution de ces requêtes.
Hors ligne Exorta # Posté le 28/02/2008 à 13:45:33 - Ce membre n'a pas mis de note
WGT.W3 Webby
Avatar
Groupe : Membres
Salut,

c'est un bon tutorial je pense. Par contre y'a juste une phrase qui me "chagrine": "Sans les commentaires, parce ça n'a pas grand intérêt."
Même si, pris dans le contexte, on comprend bien que tu veux dire que tous les commentaires que tu as mis précédemment surchargent le code, c'est à éviter quand on s'adresse à des zéros (comme c'est censé être le cas ;p); après ça peut donner du code non commenté, qui est illisible à la relecture.
Enfin c'est un avis :D

Webmaster of WGTour.
 
Hors ligne SpaceFox # Posté le 28/02/2008 à 11:48:13 - Ce membre n'a pas mis de note
Ton code existe deja, en mieux
Avatar
Groupe : Membres
Effectivement, c'est EasyPHP2 et pas EasyPHP5 (encore que depuis le temps, ils devraient en être à la 2.5 :p )
Mais je vais attendre un peu d'autres éventuels retours pour éviter d'avoir à le faire revalider juste pour ça.

Citation : `Haku
Si c'est la pour toi les raisons principales pour utiliser mysqli, c'est un peu n'importe quoi.

Non, la première raison est que ça permet de faire un code beaucoup plus facile à modifier / maintenir après, notamment si on veut changer quelque chose au comportement SQL. Extrêmement pratique lors du développement et du debug.
La seconde raison, c'est celle donnée dans la doc PHP :
Citation : La doc PHP sur l'extension MySQL
Bien que cette extension MySQL soit compatible avec MySQL 4.1.0 et supérieur, elle ne supporte pas les fonctionnalités supplémentaires que cette version fournit. Pour cela, utilisez plutôt l'extension MySQLi.

Toutefois, vu que le zéro de base ne sait pas ce que sont ces fonctionnalités supplémentaires...

En fait je suis en train de m'apercevoir que c'est la phrase qui n'est pas claire. C'est pas un argument pour utiliser MySQLi (vu que c'est la conclusion), c'est une démonstration de ses possibilités.

Pour ce qui est de grouper des requêtes, je ne sais pas avec mysql_*(), mais la syntaxe :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $objet_mysqli->query('REQUETE SQL 1;
  3.                      REQUETE SQL 2;');
  4. ?>
Ne fonctionne pas ou ne donne pas toujours les résultats attendus.

Image utilisateur
Image utilisateur

Image utilisateur
 
Hors ligne Anonyme # Posté le 28/02/2008 à 03:16:10 - Ce membre n'a pas mis de note
Groupe :
Citation
MySQLi permet de faire la même chose que l'extension MySQL (ça vous savez le faire, maintenant), plus plein d'autres trucs. Les plus intéressants sont la gestion des transactions et surtout la possibilité de « grouper » les requêtes en un seul appel. Mais là, c'est l'objet d'un autre tuto !

Si c'est la pour toi les raisons principales pour utiliser mysqli, c'est un peu n'importe quoi.
Rien n'empêche d'utiliser les transactions avec les fonctions mysql_*().
Et rien n'empêche de "grouper" plusieurs requêtes en un seul appel (ce qui n'a pas grand intérêt d'ailleurs si ce n'est une fausse idée de compréhension).
Hors ligne ilys # Posté le 27/02/2008 à 21:19:37 - Ce membre a mis la note : 20
Vive le Rock, Linux, et le SDZ
Avatar
Groupe : Membres
Moi je dit 20/20
C"est vrai qu'il faut corrigé le easyphp5

Fait par Tn. :soleil:
>>>>>>Mon tuto sur la Recherche séquentielle et dichotomique
>>>>>>Mon topic sur les images anti-bots
Venez signer la PETITION ANTI-CENSURE
 
Hors ligne EmmaBlack # Posté le 27/02/2008 à 18:46:59 - Ce membre a mis la note : 15
Avatar
Groupe : Membres
Bon tuto :D
Beaucoup de chance qu'il me serve une fois, mais EasyPHP5, ils n'en sont pas au développement de la 2 ?

Image utilisateur
 
Hors ligne Dam_neo # Posté le 27/02/2008 à 13:20:14 - Ce membre a mis la note : 17
Avatar
Groupe : Membres
Vraiment interessant
 

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 154 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.1044s (0.0881s)