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 :

Variable - SQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 46
    Par défaut Variable - SQL
    Bonjour à tous,

    J'ai un problème de variable et je ne trouve pas le problème, si quelqu'un aurait une solution ?

    Le but est depuis une requêtes SQL, avec un paramètre en fin d'URL. De récupéré depuis une période (mois, jours,...) et que l’afficher.

    - J'ai activer les erreurs PDO,
    - J'essaie d'analyser les erreurs en l'URL pour retourner un message.

    Mais j'ai un problème de variable si vous avez la réponse merci de me l'indiquer.

    Merci d'avance

    Voici mon code :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    <?php
     
     //Affichage des erreurs PHP
     error_reporting(E_ALL);
    ini_set('display_errors', TRUE);
    ini_set('display_startup_errors', TRUE);
     
    //class de connexion à la bdd
    require_once 'Database.php';
     
    $oDb  = new Database();
    //$con = $oDb->getConnection(); 
     
    $periode = 'HOUR';
    if( !empty( $_GET['periode'] ) ) {
        switch( $_GET['periode'] ) {
            case 1:
                $periode = 'HOUR';
                break;
            case 2:
                $periode = 'DAY';
                break;
            case 3:
                $periode = 'WEEK';
                break;
            case 4:
                $periode = 'MONTH';
                break;
            case 5:
                $periode = 'YEAR';
                break;
        }
    }
     
    $sql = "SELECT timestamp,sensor,value from sensorparser Where timestamp > CURDATE() - INTERVAL 1 ".$periode;
     
    $res = $oDb->db_All($sql);
     
    $result = $res->query($sql);
    $result->setFetchMode(PDO::FETCH_OBJ);
    $i=0;
    $liste=array();
    while($l=$result->fetch())
    {
    	$courant = array(
    		'timestamp'=>("/Date(".strtotime($l->timestamp)."000)/"),
    	'sensor'=>$l->sensor,
    	'value'=>$l->value);
    $liste[$i]=$courant;
    $i++;
    }
     
     
    if(!empty($res)){
      $json = json_encode($res);
      echo strtr($json, ['filename' => 'fileName', 'folderdirectory' => 'folderDirectory', 'lastchange' => 'lastChange']);
    }else{
      echo "Paramètre inconnu ";
    }

    Databse

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?php
     
    class Database {
     
        private $host = "xxxxxxx";
        private $username = "xxxxx";
        private $password = "xxxxx";
        private $database = "xxxxxxxxxx";
     
       public $connexion;
     
    	function __construct(){
    		$this->getconnexion();
    	}
     
        public function getconnexion() {
            $this->connexion = null;
     
            try {
                $this->connexion = new PDO("mysql:host=".$this->host.";dbname=".$this->database .';charset=utf8', $this->username, $this->password);
                // Activation des erreurs PDO
    			 $this->connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    			// mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
    			 $this->connexion->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
            } catch (PDOException $exception) {
                echo "Error: ".$exception->getMessage();
                die();
            }
            return $this->connexion;
        }
     
        public function closeconnexion() {
            $this->connexion = null;
        }
     
     
    	/**
    	Execution d'une requete preparee
    	*/
    	public function db_Exec($sql,$datas=NULL){
     
    		//Execution de la requete
    		try{
    		  $requete = $this->connexion->prepare($sql) ;
    		  $requete->execute($datas) ;
    		}catch(Exception $e){
    		  // en cas d'erreur :
    		   echo " Erreur ! ".$e->getMessage();
    		   echo " Les datas : " ;
    		  print_r($datas);
    		  exit;
    		}
    		return $requete;
    	}
     
    	/**
    	 Requête SELECT
    	 @sql string
    	 @datas array
    	 @return Array
    	*/
    	public function db_All($sql,$datas=NULL){
    		$req = $this->db_Exec($sql,$datas);
    		return $req->fetchAll();
    	}
     
    }
     
     
    ?>

    Voici le résultat :

    ( ! ) Fatal error: Uncaught Error: Call to a member function query() on array in C:\wamp64\www\ControleAmbiance\getTranslation.php on line 39
    ( ! ) Error: Call to a member function query() on array in C:\wamp64\www\ControleAmbiance\getTranslation.php on line 39
    Call Stack
    # Time Memory Function Location
    1 0.0013 407688 {main}( ) ...\getTranslation.php:0
    Et serait-il possible de retourner en JSON un message d’erreur avec une clé (par exemple ERREUR_PARAM) et une valeur significative de l’erreur détectée (par exemple paramètre inconnu) ? Et comment faire ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 427
    Par défaut
    Bonjour,
    D'après les erreurs il s'agit plus d'un problème PHP que SQL.
    De plus l'erreur semble concerner la lignes 37 et 39. Or dans tes deux (extraits ?) de code, ces lignes sont soit vides, soit en commentaire.
    Je pense que tu devrais donc déplacer ta demande dans la bonne section du forum.

    Tatayo.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 46
    Par défaut
    Bonjour,

    Le problème viens du premier code que j'ai affiché, de la ligne 39.
    Avec un décalage les lignes correspondent à :
    39 -> $result = $res->query($sql);

    Pas de problème au niveau de ma BDD sur phpMyAdmin...

    Je ne comprends pas du tout pourquoi j'ai un problème..

    Concernant la connexion rien à redire les coordonner sont parfait, c'est obligé que ce soit un problème de variable ou de code...

    Merci d'avance

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 427
    Par défaut
    Ça ressemble tout de même à un problème PHP:
    Le premier code:
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $res = $oDb->db_All($sql);
     
    $result = $res->query($sql);
    Le deuxième code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /**
    	 Requête SELECT
    	 @sql string
    	 @datas array
    	 @return Array
    	*/
    	public function db_All($sql,$datas=NULL){
    		$req = $this->db_Exec($sql,$datas);
    		return $req->fetchAll();
    Visiblement db_all renvoie un tableau, le premier code tente de lancer query sur le résultat de db_all, et le message t'indique clairement que ce n'est pas possible
    Fatal error: Uncaught Error: Call to a member function query() on array in C:\wamp64\www\ControleAmbiance\getTranslation.php on line 39
    Donc le problème ne situe clairement pas dans la requête, mais bien dans le code, à moins que les commentaires ne soient pas à jour...

    Tatayo.

    P.S. je vois que la discussion a été déplacée dans la section PHP, donc mes "réflexions" sur le SQL n'a plus lieu d'être...

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    salut,

    regarde ce que renvoie ta fonction db_All : return $req->fetchAll(); et fetchAll() renvoie un array.
    Donc quand tu fais : $res = $oDb->db_All($sql); $result = $res->query($sql);, $res est un array, d'où l'erreur

  6. #6
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 46
    Par défaut
    Bonjour,

    Désolé tatayo pour la confusion du forum..

    rawsrc, je ne comprends pas trop votre solution,
    c'est déjà effectuer.. enfin je crois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql = "SELECT timestamp,sensor,value from sensorparser Where timestamp > CURDATE() - INTERVAL 1 ".$periode;
     
    $res = $oDb->db_All($sql);
     
    $result = $res->query($sql);
    $result->setFetchMode(PDO::FETCH_OBJ);
    $i=0;
    $liste=array();
    ...
    Pouvez-vous si possible reprendre mon code en le modifiant, si possible ?
    Je testerais juste après.

    Merci d'avance

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

Discussions similaires

  1. variables & sql
    Par ricoree78 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/09/2007, 15h47
  2. [SQL] $_POST avec une variable SQL
    Par heruwenli dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 31/05/2007, 16h38
  3. Variable sql => :1
    Par loupin dans le forum SQL
    Réponses: 2
    Dernier message: 02/05/2007, 22h34
  4. Réponses: 8
    Dernier message: 27/01/2007, 13h44
  5. Changer el type d'une variable sql sous postgre8/admin
    Par smag dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 24/08/2005, 12h31

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