IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Comprendre PDO [Tutoriel]


Sujet :

PHP & Base de données

  1. #21
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Ca peut sembler étrange, mais c'est tout à fait volontaire de ma part. Cet article n'est pas un "tutorial à copier coller", qui explique et guide l'utilisateur vers une solution.

    Il s'agit d'un article concret, qui se veux une base de compréhension. En somme, si je veux expliquer comment se connecter, je ne veux pas enfouir les lignes importantes sous du code qui n'est pas nécessairement lié à l'explication. (J'ai souvent des clients qui m'arrivent avec du code qu'ils ont bêtement copié-collé de tutoriels et dont 50% de celui-ci est strictement inutile au projet. Au Québec on dit souvent: "trop c'est comme pas assez.")

    Donc il y a 2 buts à cet article:
    - Être un premier contact avec PDO, et permettre à un débutant de mieux comprendre les concepts derrière les futurs tutoriels qu'il lira.
    - Faire réaliser certains concepts à la base même de PDO qui ne sont pas toujours bien expliqué à une personne ayant déjà essayé, ou utilisant déjà PDO.

    Donc en aucun cas cet article ne prétend être un tutoriel du type "lisez-moi et convertissez vos projets vers PDO immédiatement après"

    Je n'ai pas abordé les exceptions plus qu'il faut, car je pense que le sujet dépasse le cadre de cet article, et je préférais consacrer un autre article bien distinct à ce sujet, qui est assez vaste quand même. (Et lorsque cet article existera, je ferais un beau lien: promis !)

  2. #22
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par FMaz Voir le message
    Je n'ai pas abordé les exceptions plus qu'il faut, car je pense que le sujet dépasse le cadre de cet article, et je préférais consacrer un autre article bien distinct à ce sujet, qui est assez vaste quand même. (Et lorsque cet article existera, je ferais un beau lien: promis !)
    Donc mettre le ERRMODE_WARNING pour la connexion serai plus logique

  3. #23
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Hum, tu me place face à un dilemme :
    - Si je configure ca en WARNING, c'est comme si je décourageais l'utilisation des exceptions.
    - Si je met des try-catch, je vais contre mon principe de simplicité...

    Bon bon, et si j'accepte de mettre un try-catch pour la connexion, tu va en exiger pour tous les exemples qui suivent aussi ?

    (Négocier, toujours négocier )

  4. #24
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par FMaz Voir le message
    Hum, tu me place face à un dilemme :
    - Si je configure ca en WARNING, c'est comme si je décourageais l'utilisation des exceptions.
    - Si je met des try-catch, je vais contre mon principe de simplicité...

    Bon bon, et si j'accepte de mettre un try-catch pour la connexion, tu va en exiger pour tous les exemples qui suivent aussi ?

    (Négocier, toujours négocier )
    le try...catch pour la connexion est de toutes façons obligatoire, sinon impossible de savoir si c'est connecter, (a part avec if et instanseof PDO)

    on va dire si on fait du procédurale c'est plus simple de d'utilisé les exceptions, si on fait de l'objet on se tournera plus vers les exceptions, et rien n'empêche dans une classe de faire set_exception_hanlder non plus

  5. #25
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Et maintenant ?
    http://fmaz.developpez.com/tutoriels...re-pdo/#LIII.a

    J'en ai profité pour faire 3 choses:
    - Montrer comment faire une trace d'une erreur.
    - Gérer l'exception
    - Ajouter la note sur le bug avec PHP 5.3.0

  6. #26
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    la t'auras un Fatal error à chaque erreur de requête fausse

    EDIT : t'as pas besoin de faire closeCursor() apres un fetchAll, c'est uniquement quand tu ne parcours pas tout les fetch (et y'a aussi fetchAll pour mysqli, mais uniquement quand il compilé avec mysqlnd donc <= 5.3.0)

  7. #27
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Oui, je sais, c'est bien ce que j'ai dis plus haut ...
    Mais je vais pas mettre des try-catch pour tout les exemples, ca serait pénible à la lecture.

    Bon, je vais ajouter une note en même temps que celle qui dit que je ne vais pas ré-établir une connexion pour tous les exemples.

  8. #28
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    pourquoi tu voudrais ré-établir une connexion ?

  9. #29
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Regarde le dernier paragraphe de la section http://fmaz.developpez.com/tutoriels...re-pdo/#LIII.a

  10. #30
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    ah oui ok, j'avais mal compris

  11. #31
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    J'ai pas vu d'exemple à propos de la méthode bindparam() dans ce tuto ?

    Un exemple d'utilisation pratique pour des insertions massives :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $noms = array( "tillom", "hochon", "issier" , "issier" );
    $prenoms = array( "jean" , "paul" , "paul" , "pat" );
    $stmt = $pdo->prepare( 'insert into maTable (nom, prenom) values (:nom,:prenom)' );
    $stmt->bindparam( ":nom" , $nom , PDO::PARAM_STR );
    $stmt->bindparam( ":prenom" , $prenom , PDO::PARAM_STR );
     
    foreach( $noms as $cle=>$nom ){
    	$prenom = $prenoms[ $cle ];
    	$stmt->execute();
    }
    Pourfendeur de singletons en croisade

  12. #32
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Je sais. Il ne m'a pas semblé utile de couvrir cette fonction qui s'avère nécéssaire (obligatoire) que dans des cas très particulié.

    Merci cependant pour les précisions dans les commentaires

  13. #33
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par FMaz Voir le message
    Je sais. Il ne m'a pas semblé utile de couvrir cette fonction qui s'avère nécéssaire (obligatoire) que dans des cas très particulié.

    Merci cependant pour les précisions dans les commentaires
    ouai pour du param_str et sans le param length ca sert pas a grand chose

  14. #34
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    ouai pour du param_str et sans le param length ca sert pas a grand chose
    Pour une question de sécurité ou autre ?

    Perso je mets jamais de param length, j'ai surement tords mais je délègue la longueur de ma chaine à ma base ( varchar(50), varchar(100)...). A lui de tronquer !

    Mais de toute manière, quand j'arrive à insérer en base, les contrôles php ont déjà été effectués en amont donc ce param ne me sers pas (du moins je pense)

  15. #35
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    Pour une question de sécurité ou autre ?
    non c'est plus dans le sens ou par défaut tout est binder en str

  16. #36
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    oki je croyais que tu rebondissais sur l'exemple de Petitbidon qui utilisait PDO:ARAM_STR sans longueur

  17. #37
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    oki je croyais que tu rebondissais sur l'exemple de Petitbidon qui utilisait PDO:ARAM_STR sans longueur
    oui, ducoup le bind sert a rien puisque tout est par defaut, ca aurai été plus parlant avec un PARAM_INT, ou avec le paramètre length

    sinon on peux aussi mettre les tableau ou des objets en paramètre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $stmt->bindparam( ":nom" , $row['nom'] , PDO::PARAM_STR );
    $stmt->bindparam( ":prenom" , $row['prenom'] , PDO::PARAM_STR );

  18. #38
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    ou alors créer des objets personne avec stdclass ou une classe Personne de facon à ce que si un nom ou un prenom manque, il soit insérer NULL en table et qu'il y est pas d'erreurs de membre prenom/nom manquant mais c'est un autre sujet^^

  19. #39
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Madfrix Voir le message
    ou alors créer des objets personne avec stdclass ou une classe Personne de facon à ce que si un nom ou un prenom manque, il soit insérer NULL en table et qu'il y est pas d'erreurs de membre prenom/nom manquant mais c'est un autre sujet^^
    ouai, voir le top faire un FETCH_CLASS
    faudrais que je fasse un sujet sur les FETCH y'a plein de truc simpa, comme le class, into, lazy, func et surtout le group

  20. #40
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Jamais utilisé FETCH_CLASS alors je suis pas contre un tuto

    Demain pour 10h c'est possible ?

    J'ai maintenant l'habitude d'utiliser le module Zend_Db pour le mapping et je dois dire que parfois on devient un peu fainéant avec et qu'on oublie "les bases"

Discussions similaires

  1. [PDO] Problème de requête préparée (à n'y rien comprendre?)
    Par waldo2188 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/03/2007, 21h53
  2. [Concept][JavaBeans] Comprendre ?
    Par nicoo dans le forum Langage
    Réponses: 15
    Dernier message: 08/12/2004, 08h01
  3. [Procédure][java] A n'y rien comprendre
    Par Stessy dans le forum SQL
    Réponses: 2
    Dernier message: 18/03/2004, 15h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo