SQL - Php - 2 Requêtes - Problème
Résolu/Fermé
A voir également:
- SQL - Php - 2 Requêtes - Problème
- 2 ecran pc - Guide
- Word numéro de page 1/2 - Guide
- 2 comptes whatsapp - Guide
- 3 bip long 2 bip court hp - Forum BIOS
- Imprimer a3 sur 2 a4 ✓ - Forum Bureautique
4 réponses
jordane45
Messages postés
38268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
28 mars 2020 à 18:04
28 mars 2020 à 18:04
Bonjour,
Evite de "lier" les instructions.... il est préférable de les exécuter les unes après les autres pour identifier clairement les soucis.
Fais donc également un echo de ta variable $sql pour voir ce qu'elle contient......
Active également la gestion des erreurs PDO :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Reviens nous voir avec le résultat du echo et ton code modifié si l'erreur persiste.
Evite de "lier" les instructions.... il est préférable de les exécuter les unes après les autres pour identifier clairement les soucis.
$res = $con->query($sql); $data = $res->fetchAll(PDO::FETCH_ASSOC);
Fais donc également un echo de ta variable $sql pour voir ce qu'elle contient......
Active également la gestion des erreurs PDO :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Reviens nous voir avec le résultat du echo et ton code modifié si l'erreur persiste.
Bonjour Jordane,
Merci d'avoir répondu,
Alors j'ai suivis vos instructions, enfin j'ai essayer de comprendre et d'améliorer suivant mon code. Peut-être que j'ai mal compris...
Voici ce que j'ai réalisé :
Résultats :
SELECT `timestamp`, `sensor`, `value` FROM sensorparser WHERE `timestamp` > CURDATE() - INTERVAL 1 MONTH AND `sensor` = blabla
( ! ) Fatal error: Uncaught Error: Call to a member function fetchAll() on bool in C:\wamp64\www\sensor_CO\getTranslation.php on line 31
( ! ) Error: Call to a member function fetchAll() on bool in C:\wamp64\www\sensor_CO\getTranslation.php on line 31
Call Stack
# Time Memory Function Location
1 0.0011 407552 {main}( ) ...\getTranslation.php:0
Et revenir à PDO, j'ai déjà ça sur ma page Database.php :
Je m'excuse d'avance si j'ai mal compris..
Merci d'avoir répondu,
Alors j'ai suivis vos instructions, enfin j'ai essayer de comprendre et d'améliorer suivant mon code. Peut-être que j'ai mal compris...
Voici ce que j'ai réalisé :
<?php include 'Database.php'; $database = new Database(); $con = $database->getConnection(); $p = isset($_GET['periode']) ? (int)$_GET['periode'] : 1; $periode = [1 => 'HOUR', 2 => 'DAY', 3 => 'WEEK', 4 => 'MONTH', 5 => 'YEAR'][$p] ?? 'HOUR'; $caps = [ 'CO' => 'blabla', 'CO2' => 'blabla', 'LUX'=> 'blabla', 'BAT' => 'blabla', 'HALL' => 'blabla', 'LP' => 'blabla', 'PIR' => 'blabla', 'STR' => 'blabla', 'HUM' => 'blabla', 'PRES' => 'blabla', 'TC' => 'blabla' ]; $c = $_GET['capteur'] ?? 'TC'; $capteur = $caps[$c] ?? 'TC'; $sql = <<<sql SELECT `timestamp`, `sensor`, `value` FROM sensorparser WHERE `timestamp` > CURDATE() - INTERVAL 1 {$periode} AND `sensor` = {$capteur} sql; echo $sql; try { $res = $con->query($sql); $data = $res->fetchAll(PDO::FETCH_ASSOC); $json = json_encode($data); }catch (Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } echo strtr($json, ['filename' => 'fileName', 'folderdirectory' => 'folderDirectory', 'lastchange' => 'lastChange']);
Résultats :
SELECT `timestamp`, `sensor`, `value` FROM sensorparser WHERE `timestamp` > CURDATE() - INTERVAL 1 MONTH AND `sensor` = blabla
( ! ) Fatal error: Uncaught Error: Call to a member function fetchAll() on bool in C:\wamp64\www\sensor_CO\getTranslation.php on line 31
( ! ) Error: Call to a member function fetchAll() on bool in C:\wamp64\www\sensor_CO\getTranslation.php on line 31
Call Stack
# Time Memory Function Location
1 0.0011 407552 {main}( ) ...\getTranslation.php:0
Et revenir à PDO, j'ai déjà ça sur ma page Database.php :
<?php class Database { private $host = "xxxxxx"; private $username = "yyyyy"; private $password = "yyyy"; private $database = "yyyyyyyyyyyyyyyy"; public $connection; public function getConnection() { $this->connection = null; try { $this->connection = new PDO("mysql:host=".$this->host.";dbname=".$this->database, $this->username, $this->password); $this->connection->exec("set names utf8"); } catch (PDOException $exception) { echo "Error: ".$exception->getMessage(); die(); } return $this->connection; } public function closeConnection() { $this->connection = null; } } ?>
Je m'excuse d'avance si j'ai mal compris..
Ok, c'est bon après plusieurs heures de travailles :
SELECT `timestamp`, `sensor`, `value` FROM sensorparser WHERE `timestamp` > CURDATE() - INTERVAL 1 MONTH AND `sensor` = blabla Erreur ! SQLSTATE[42S22]: Column not found: 1054 Champ 'blabla' inconnu dans where clause Les datas :
( ! ) Notice: Undefined variable: datas in C:\wamp64\www\sensor_CO\getTranslation.php on line 37
Call Stack
# Time Memory Function Location
1 0.0006 404864 {main}( ) ...\getTranslation.php:0
( ! ) Notice: Undefined variable: json in C:\wamp64\www\sensor_CO\getTranslation.php on line 40
Call Stack
# Time Memory Function Location
1 0.0006 404864 {main}( ) ...\getTranslation.php:0
SELECT `timestamp`, `sensor`, `value` FROM sensorparser WHERE `timestamp` > CURDATE() - INTERVAL 1 MONTH AND `sensor` = blabla Erreur ! SQLSTATE[42S22]: Column not found: 1054 Champ 'blabla' inconnu dans where clause Les datas :
( ! ) Notice: Undefined variable: datas in C:\wamp64\www\sensor_CO\getTranslation.php on line 37
Call Stack
# Time Memory Function Location
1 0.0006 404864 {main}( ) ...\getTranslation.php:0
( ! ) Notice: Undefined variable: json in C:\wamp64\www\sensor_CO\getTranslation.php on line 40
Call Stack
# Time Memory Function Location
1 0.0006 404864 {main}( ) ...\getTranslation.php:0
jordane45
Messages postés
38268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
28 mars 2020 à 21:06
28 mars 2020 à 21:06
Déjà.. tu n'as pas activé les erreurs PDO dans la connexion.
Ensuite,
si tu regardes le echo de ta requête SQL tu vois qu'il manque des quotes...
L'as tu essayé directement dans ta BDD pour voir ce qu'elle te retourne ??
Ca devrait être ça:
Au niveau de ta class, tu pourrais faire un truc du genre
Et dans ton code :
Ensuite,
si tu regardes le echo de ta requête SQL tu vois qu'il manque des quotes...
SELECT `timestamp`, `sensor`, `value` FROM sensorparser WHERE `timestamp` > CURDATE() - INTERVAL 1 MONTH AND `sensor` = blabla
L'as tu essayé directement dans ta BDD pour voir ce qu'elle te retourne ??
Ca devrait être ça:
SELECT `timestamp`, `sensor`, `value` FROM sensorparser WHERE `timestamp` > CURDATE() - INTERVAL 1 MONTH AND `sensor` = ' blabla'
Au niveau de ta class, tu pourrais faire un truc du genre
<?php class Database { private $host = "xxxxxx"; private $username = "yyyyy"; private $password = "yyyy"; private $database = "yyyyyyyyyyyyyyyy"; 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(); } } ?>
Et dans ton code :
<?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(); // plus besoin, c'est dans le construct.. $p = !empty($_GET['periode']) ? (int)$_GET['periode'] : 1; $c = !empty($_GET['capteur']) ? $_GET['capteur'] : 'TC'; $periode = [1 => 'HOUR', 2 => 'DAY', 3 => 'WEEK', 4 => 'MONTH', 5 => 'YEAR'][$p] ?? 'HOUR'; $caps = [ 'CO' => 'blabla', 'CO2' => 'blabla', 'LUX'=> 'blabla', 'BAT' => 'blabla', 'HALL' => 'blabla', 'LP' => 'blabla', 'PIR' => 'blabla', 'STR' => 'blabla', 'HUM' => 'blabla', 'PRES' => 'blabla', 'TC' => 'blabla' ]; $capteur = !empty($caps[$c]) ? $caps[$c] : 'TC'; $sql = <<<sql SELECT `timestamp`, `sensor`, `value` FROM sensorparser WHERE `timestamp` > CURDATE() - INTERVAL 1 {$periode} AND `sensor` = :capteur sql; $datas = array(':capteur'=>$capteur); $res = $oDb->db_All($sql,$datas); if(!empty($res)){ $json = json_encode($res); echo strtr($json, ['filename' => 'fileName', 'folderdirectory' => 'folderDirectory', 'lastchange' => 'lastChange']); }else{ echo "No result !"; }
Merci beaucoup pour le travail fournis c'est juste énorme surtout à 21h un Samedi, désolé...
Alors j'ai essayé ton code,
Error: SQLSTATE[HY000] [1049] Base 'meshliumdbcharset=utf8' inconnue
Alors j'ai enlever le charset=utf8 :
No result !
Je suis perdu avec mon code ça m'énerve quand ça m'arrive quoi xD
Alors j'ai essayé ton code,
Error: SQLSTATE[HY000] [1049] Base 'meshliumdbcharset=utf8' inconnue
Alors j'ai enlever le charset=utf8 :
No result !
Je suis perdu avec mon code ça m'énerve quand ça m'arrive quoi xD
jordane45
Messages postés
38268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
28 mars 2020 à 22:13
28 mars 2020 à 22:13
Il y a un point virgulequi a sauté juste avant le mot charset il faut juste le remettre
FayWennn
>
jordane45
Messages postés
38268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
28 mars 2020 à 22:19
28 mars 2020 à 22:19
"mysql:host=".$this->host.";dbname=".$this->database .';charset=utf8', $this->username, $this->password
Résultat :
No result !
jordane45
Messages postés
38268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
>
FayWennn
28 mars 2020 à 22:42
28 mars 2020 à 22:42
Ben.. c'est qu'il n'y a pas de résultat correspondant à ta recherche....
Je te le redemande.. as tu testé ta requête directement dans la BDD pour savoir si elle fonctionne ?
Je te le redemande.. as tu testé ta requête directement dans la BDD pour savoir si elle fonctionne ?
Bien sûr, ça marche :
http://82.233.223.249:8088/sensor_CO/getTranslation.php?periode=5&capteur=T
Alors là... wtf, tout marche MAIS que sur le capteur "TC" et avec une autre lettre...
Même si la solution est juste à côté je craque..
http://82.233.223.249:8088/sensor_CO/getTranslation.php?periode=5&capteur=T
Alors là... wtf, tout marche MAIS que sur le capteur "TC" et avec une autre lettre...
Même si la solution est juste à côté je craque..
jordane45
Messages postés
38268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
4 694
28 mars 2020 à 22:59
28 mars 2020 à 22:59
Là tu nous montres le résultat du code PHP .... moi je te demande le résultat de ta requête SQL exécuté DIRECTEMENT dans ta bdd ( via phpmyadmin par exemple).
A noter que ton array $caps... ne contient que des valeurs "blabla" ... et que tu construit ta requête à partir de cette valeur . ??
Je pense que si tu remplaces
par :
ça fonctionnera correctement....
Ton array $caps ne servant à rien visiblement....
A noter que ton array $caps... ne contient que des valeurs "blabla" ... et que tu construit ta requête à partir de cette valeur . ??
Je pense que si tu remplaces
$datas = array(':capteur'=>$capteur);
par :
$datas = array(':capteur'=>$c);
ça fonctionnera correctement....
Ton array $caps ne servant à rien visiblement....
FayWennn
>
jordane45
Messages postés
38268
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 novembre 2024
Modifié le 28 mars 2020 à 23:05
Modifié le 28 mars 2020 à 23:05
J'allais le faire sur ma BDD.. je viens juste de modifier par $c
Et tout marche...
Franchement, je sais pas comment te remercier !... Si tu as des idées.. xD
Depuis des jours je suis dessus...
Et tout marche...
Franchement, je sais pas comment te remercier !... Si tu as des idées.. xD
Depuis des jours je suis dessus...