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

MkFramework Discussion :

Problèmes requête base de données


Sujet :

MkFramework

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 53
    Points : 46
    Points
    46
    Par défaut Problèmes requête base de données
    Bonjour, depuis peu je rencontre un problème très bizarre sur un des modules.

    Dans mon model_pointage.php j'ai ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function findHeureTotal($user,$date1,$date2){
    		return $this->findOne('SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( subtime(time(heure_s),time(heure_e)) ) ) ) as htt FROM '.$this->sTable.' WHERE id_pointeur="'.$user.'" AND date_pointage BETWEEN "'.$date1.'" AND "'.$date2.'"');
     
    		//return 'SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( subtime(time(heure_s),time(heure_e)) ) ) ) as htt FROM '.$this->sTable.' WHERE id_pointeur="'.$user.'" AND date_pointage BETWEEN "'.$date1.'" AND "'.$date2.'"';
     
    	}
    Lorsque j'utilise le return que j'ai commenté ci-dessus, je me rend compte que la requête est bonne car j'ai ça (j'ai fais exprès de ne pas utiliser les '?' juste pour tester)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( subtime(time(heure_s),time(heure_e)) ) ) ) as htt FROM pointage WHERE id_pointeur="10" AND date_pointage BETWEEN "2017-10-01" AND "2017-10-31"'
    Lorsque je copie ce code et que je lance la requête dans phpmyadmin ça fonctionne correctement et cela me retourne bien une valeur 03:15:00

    Mais lorsque j'utilise la methode findOne, j'ai null comme résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    object(row_pointage)[24]
      protected 'sClassModel' => string 'model_pointage' (length=14)
      private '_bChooseUpdate' (abstract_row) => boolean true
      protected '_tProperty' => 
        array (size=1)
          'htt' => null
      protected '_tPropertyToUpdate' => null
    Cela marchait à merveille auparavant, mais je ne sais pas pourquoi maintenant cela ne marche plus

    La requête normale, c'était ça au départ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return $this->findOne('SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( subtime(time(heure_s),time(heure_e)) ) ) ) as htt FROM '.$this->sTable.' WHERE id_pointeur=? AND date_pointage BETWEEN ? AND ?',$user,$date1,$date2);

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Bonjour,
    Vous pouvez verifier la requete executée en activant dans la log :

    dans le fichier conf/site.ini.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [log]
    class=plugin_log
    error=0
    warning=0
    application=0
    information=1
    file.enabled=1
    apache.enabled=1
    Mettez information=1

    Ensuite, en rechargeant votre page, vous aurez un fichier dans data/log et vous y trouverez la requete reellement executée

    Afin de verifier qu'elle correspond bien à celle attendue

    Ensuite une chose qui peut etre faite c'est de remplacer findOne par findOneSimple afin de recuperer l'objet direct de pdo

    Remplacez donc
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function findHeureTotal($user,$date1,$date2){
    		return $this->findOne('SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( subtime(time(heure_s),time(heure_e)) ) ) ) as htt FROM '.$this->sTable.' WHERE id_pointeur="'.$user.'" AND date_pointage BETWEEN "'.$date1.'" AND "'.$date2.'"');
     
    		//return 'SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( subtime(time(heure_s),time(heure_e)) ) ) ) as htt FROM '.$this->sTable.' WHERE id_pointeur="'.$user.'" AND date_pointage BETWEEN "'.$date1.'" AND "'.$date2.'"';
     
    	}
    par
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function findHeureTotal($user,$date1,$date2){
    		return $this->findOneSimple('SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( subtime(time(heure_s),time(heure_e)) ) ) ) as htt FROM '.$this->sTable.' WHERE id_pointeur="'.$user.'" AND date_pointage BETWEEN "'.$date1.'" AND "'.$date2.'"');
     
    		//return 'SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( subtime(time(heure_s),time(heure_e)) ) ) ) as htt FROM '.$this->sTable.' WHERE id_pointeur="'.$user.'" AND date_pointage BETWEEN "'.$date1.'" AND "'.$date2.'"';
     
    	}

    Enfin 3: il est deconseille de concatener les variables au sein de la requete SQL, c'est tres dangereux (SQLinjection), preferez l'utilisation de prepare statement

    ce qui donnerait ici:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function findHeureTotal($user,$date1,$date2){
    		return $this->findOneSimple('SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( subtime(time(heure_s),time(heure_e)) ) ) ) as htt FROM '.$this->sTable.' WHERE id_pointeur=? AND date_pointage BETWEEN ? AND ? ',$user,$date1,$date2);
     
     
     
    	}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 53
    Points : 46
    Points
    46
    Par défaut Résolu
    Bonjour,
    Merci des réponses super rapide. En faite, la requête était bonne. Le bon résultat était bien NULL. Je vais essayer de le gérer pour la suite au cas ou on a une réponse NULL

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 53
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par imikado Voir le message
    Bonjour,

    Enfin 3: il est deconseille de concatener les variables au sein de la requete SQL, c'est tres dangereux (SQLinjection), preferez l'utilisation de prepare statement

    ce qui donnerait ici:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function findHeureTotal($user,$date1,$date2){
    		return $this->findOneSimple('SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( subtime(time(heure_s),time(heure_e)) ) ) ) as htt FROM '.$this->sTable.' WHERE id_pointeur=? AND date_pointage BETWEEN ? AND ? ',$user,$date1,$date2);
     
     
     
    	}
    Et, juste pour info, c'est ce que j'utilise d'habitude. C'était juste pour trouver ou est ce que se situait le problème que j'ai essayé les autres méthodes. Merci encore pour votre superbe travail!

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

Discussions similaires

  1. [VB6]Débutant - Problèmes de base de données?
    Par steeves5 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/06/2006, 22h05
  2. Problème conexion base de données MSSql DBE
    Par kaouane dans le forum Bases de données
    Réponses: 4
    Dernier message: 28/05/2006, 12h40
  3. Réponses: 3
    Dernier message: 27/04/2006, 15h21
  4. Problème accès base de données
    Par alainconnu dans le forum Outils
    Réponses: 3
    Dernier message: 27/04/2006, 09h31
  5. Problème Update Base de données avec les composants ADO
    Par lingli dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/04/2006, 00h41

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