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 :

Exceptions et fermeture de connexion [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut Exceptions et fermeture de connexion
    Bonjour,

    je suis en train de lire un tuto sur PDO et il y a un truc qui me chiffonne dans la partie "Gestion des erreurs de connexion" (et j'ai lu ça dans plusieurs tuto) :
    Si votre application ne gère pas les exceptions lancées depuis le constructeur PDO, l'action par défaut du moteur zend est de terminer le script et d'afficher une trace.
    Ma 1ère question est : Quel est le rapport entre Zend et PDO ?!?
    Ma 2ème question : ça veut dire qu'on n'est pas obligé de gérer les exceptions ?

    Et une dernière question : pour des raisons de performance, il faut libérer les ressources d'un objet. Je ne vois casiment nullepart marquer qu'il faut libérer la connexion ou les curseurs utilisés avec PDO, est-ce que c'est normal ?

    Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    1 - le moteur de PHP s'appelle Zend Engine.
    2 - En fait ce n'est pas tout a fait exact : par défaut l'erreur n'est pas affichée ; mais de toute facon tu fais ce que tu veux de l'exception.
    3 - les ressources sont liberés a la fin du script dans tous le cas mais tu peux si tu ole veux l'ecrire explicitement.

  3. #3
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut
    Bonjour et merci pour ces réponses.

    3 - les ressources sont libérées à la fin du script
    oui bien sûr, mais je croyais qu'il fallait le faire systématiquement dans le code, justement pour des raisons de performance !..

    J'ai une autre question sur PDO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    $sth = $dbh->prepare("SELECT nom, couleur FROM fruit");
    $sth->execute();
     
    /* Récupération de toutes les lignes d'un jeu de résultats */
    print("Récupération de toutes les lignes d'un jeu de résultats :\n");
    $result = $sth->fetchAll();
    print_r($result);
    ?>
    (extrait du manuel PHP)
    Lorsqu'on utilise la fonction prepare, on n'est pas obligé de faire une requête préparée ? (avec un ? ou un marqueur nominatif)
    Si non, ce n'est pas mauvais de faire ça ? (niveau performance)

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    justement pour des raisons de performance
    Si tu as un script long qui s'execute ensuite et qui ne ferra plus appel a la bdd oui tu peux explicitement liberer ta ressource avant ; mais si c'est pour le faire 2 lignes avant le fin du code, tu ne gagnes rien, mais tu peux tout de même l'écrire si tu le souhaites.

    Lorsqu'on utilise la fonction prepare, on n'est pas obligé de faire une requête préparée
    Ca ne sert a rien c'est sur.

  5. #5
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut
    Donc il est inutile d'utiliser la fonction prepare (puis execute) quand on n'a pas de requêtes préparées. Mais que dire des performances ?

    J'ai essayé de faire un test, j'espère que je me goure pas..
    1er test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $db = new PDO('mysql:host='.$servername.';dbname='.$database , $username, $password);
     
    $sql = "SELECT * FROM table";
    $sth = $db->prepare($sql);
    $sth->execute();
     
    $db=null;
    2ème test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $connexion = mysql_connect($servername,$username,$password);
    mysql_select_db($database,$connexion);
     
    $sql = "SELECT * FROM table";
    $result = mysql_query($sql,$connexion);
     
    mysql_close($connexion);
    Je trouve quasiment les mêmes temps d'exécution, qu'est-ce que vous en pensez ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    On ne peut pas faire une mesure comparée en regardant juste quelques requetes.

    Dans les comparatifs qui ont deja été fait, PDO est largement moins rapide que mysql.

  7. #7
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 188
    Points : 131
    Points
    131
    Par défaut
    ok, c'est ce que je voulais entendre, merci !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Explication fermeture de connexion Mysql
    Par ideal dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/11/2006, 15h42
  2. Problème de fermeture de connexion
    Par maniolo dans le forum JDBC
    Réponses: 4
    Dernier message: 06/11/2006, 15h58
  3. Réponses: 2
    Dernier message: 19/07/2006, 10h16
  4. Fermeture de connexion en cas d'arrêt brutal
    Par Bartuk dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 30/05/2006, 16h12
  5. Réponses: 6
    Dernier message: 04/05/2006, 11h44

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