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 :

Limite de PDO


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut Limite de PDO
    Bonjour,
    travaillant actuellement sur un générateur de requêtes, tout fonctionnait très bien avec PDO jusqu'a l'ajout de mon dernier champ...

    Du a ma lourde BDD, la requete que je fait traité par PDO est très grosse aussi (32 tables, 3 vues, toute jointe dans ma query de plus de 2400 caractères)...

    Mon problème:
    depuis l'ajout de mon nouveau champ, lorsque j'appelle une requete (qui contient un WHERE sur mon dernier champ ajouté), le navigateur mouline...
    Je teste donc ma query générée avec phpMyadmin: aucun soucis : meme si la requete est lourde, l'affichage est très réactif !!
    Me demandant si PDO a atteint sa limite, je reteste avec une connection classique mysql_connect etc... Cela fonctionne sans soucis...

    Je veux juste vous préciser que PDO fonctionnait très bien avant mon dernier ajout de champ...et que celui-ci est bien nommé dans ma query !!

    Quel est donc la limite de PDO atteinte ?? Query trop grande ?? Quelqu'un a t-il la connaissance pour m'aider ??

    Please help, mon connect est moche au milieu de toute cette POO !!!

    Cordialement,
    Arnaud

  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
    Par défaut
    Il faudrait que tu mesures le temps de traitement de chaque étape pour garantir que c'est l'execution de la requête qui pose problème.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    salut,

    Pour calculer les temps de traitement, je ne m'y connais pas trop, comment faire?

    que veux-tu exactement dire par chaque étape ?? dans la classe de PDO, ou les temps d'exec de la page php ?

    S'il s'agit de la page web, le problème ne se pose pas si je mets en commentaire la partie execution de la requete... Donc pour moi, c'est bien à l'éxécution de la requete que le problème se reproduit...

    Que faire ?
    Merci
    Arnaud

  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
    Par défaut
    tu as un exemple ici pour mesurer des temps de script :
    http://fr2.php.net/manual/fr/function.microtime.php

    l'idée est d'isoler le temps d'execution de la requete (execute) de la récolte des résultats et des traitements que tu fais dessus (fetch etc.)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Ah oui, mais non.....Problème :
    je me suis sans doute mal exprimé (sorry about that), mais lorsque ma requete est lancée avec pdo, le navigateur mouline a l'infini, la page reste blanche, et je suis meme obligé de relancer un nouveau firefox parce que toute les pages que j'essaie d'afficher sur le server restent blanche...Bref, pour avoir un tps d'exec, ca va etre un peu chaud....Une solution peut etre : écrire dans un fichier ?

    Comme je te l'ai dit, lorsque la requete n'est pas executée avec PDO, tout se passe bien...

    Mince...
    Merci encore de ta réponse...On en apprend tout les jours ^^

  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
    Par défaut
    Tu as essayé de faire une page avec uniquement la connexion à la base et l'execution de la requête sans aucun traitement des données ?

    L'idée est d'isoler ton problème avec certitude.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Oui, je l'ai fait et c'est bien cela le problème...Il est bien isolé.
    Dans ma page, j'ai :
    - session_start()
    - includes functions.php (avec le généric autoload)
    - includes commons.php (avec la connection a la base)
    - $query = (ma query)
    - $myResult = $db->prepare($query);
    - $myResult->execute();
    echo "fin";

    Merci a toi de m'aider !!!

    ps: bon appétit ^^

  8. #8
    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
    Par défaut
    Ce n'est pas encore assez isolé

    tu devrais avoir juste
    - connexion sans inclusion
    - prepare
    - execute

    voir même la requête sans préparation.

    Si tu te rends compte par exemple que la requête préparée est lente alors que la requête simple est normale, tu pourras orienter ta recherche.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    re,
    j'ai réussi a calculer les temps d'execution de la requete (merci a toi pour la méthode ^^): 1330 secondes = 22 minutes
    C'est bien l'execution qui dors...

    Et maintenant (que vais-je faireuh ) ???
    Arnaud

  10. #10
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Bonjour,

    J'ai ce type d'erreur avec PDO sous Linux (jamais vu sous Windows). Je ne l'ai pas résolu.

    Ma version de PHP est 5.1.6, PDO 5.0.67, tout comme MySQL à 5.0.67.

    Chez moi, j'ai le soucis lorsque j'imbrique trop de traitements qui font des requêtes sur la base. Je pense aussi à une limite des drivers PDO. Peut-être qu'une recompilation de la librairie sur le serveur assurerait une meilleure "tenue" du driver...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Bonjour,

    merci pc.bertineau pour tes infos.

    Je ne suis pas sur de mes infos. Pour recouper avec ce que tu disais pc.bertineau, j'ai donc décidé de faire un test en supprimant des liens non nécéssaires dans ma requete...
    Malheureusement, j'ai toujours le problème...

    J'ai essayé de remettre le problème dans son contexte, et en fait, j'ai le problème depuis l'ajout de mon dernier champ dans la requete, a savoir la date de fin de maintenance...

    dans ma requete qui plante , j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE `maintenance`.`maintenance_end_date`>'2008-06-06'
    Sachant que le champs maintenance_end_date est déclaré comme datetime, quelqu'un pourrait-il me dire si j'ai un problème de format dans ma condition ???

  12. #12
    Membre très actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 248
    Par défaut
    Bonjour,

    Juste une idée... Je ne sais pas vraiment si ça peut jouer.
    dans ma requete qui plante , j'ai :
    Code :

    WHERE `maintenance`.`maintenance_end_date`>'2008-06-06'

    Sachant que le champs maintenance_end_date est déclaré comme datetime, quelqu'un pourrait-il me dire si j'ai un problème de format dans ma condition ???
    Ne faudrait-il pas préciser 2008-06-06 00:00:00 puisque c'est un champ type datetime ??

  13. #13
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Ce champ est-il correctement indexé ?
    En effet, les dates pouvant prendre un grand nombre de valeurs, un index sur cette colonne sera super efficace.

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Bonjour a vous deux qui rentrez dans la conversation.

    Pour te répondre s.n.a.f.u, j'ai créé un index:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX maintenance_end_date ON maintenance (maintenance_end_date)
    Comme résultat: identique, toujours et encore les 20 minutes...

    @albedo0: d'après mes connaissances, on n'est pas obligé de mettre les hh:mm:ss, mais je peux les mettre pour essayer, je ne suis plus à ca près...
    Ceci dit, mysql doit bien gerer mes requetes puisque cela fonctionne parfaitement avec phpMyAdmin et le mysql_connect....

    Je désespère....
    Arnaud

  15. #15
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Citation Envoyé par arnolpourri Voir le message
    Bonjour a vous deux qui rentrez dans la conversation.

    Pour te répondre s.n.a.f.u, j'ai créé un index:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX maintenance_end_date ON maintenance (maintenance_end_date)
    Comme résultat: identique, toujours et encore les 20 minutes...
    Est-ce le seul critère de la clause WHERE ?
    Dans le cas contraire, il y a de fortes chances que l'index ne soit pas utilisé ou seulement très partiellement. Il n'est pas normal que cela n'ai pas du tout accéléré la requête. Si cela fait sens, n'hésites pas à créer un index comportant toutes les colonnes de ta clause WHERE, au moins pour test.
    De même, il est souhaitable d'indexer tous les champs participants à une jointure.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    Toutes les clefs etrangères de mes tables sont indéxées.
    Et malheureusement la date de fin de maintenance est mon seul filtre de requete...

Discussions similaires

  1. [MySQL] Requete PDO et LIMIT de SQL
    Par heretik25 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/06/2011, 11h25
  2. [PDO] limit via pdo
    Par mic79 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/04/2009, 11h36
  3. [PDO] Ne supporte pas le LIMIT ?
    Par titoumimi dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 27/09/2006, 15h56
  4. [PDO] PDO et clause LIMIT
    Par jeff_! dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 09/05/2006, 18h33
  5. [Comparatifs] Limites nombres tables et quantité de données
    Par benj63 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 13/06/2002, 21h31

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