Script bash/python extraire données bdd

Script bash/python extraire données bdd - PHP - Programmation

Marsh Posté le 28-06-2022 à 12:20:47    

Bonjour
 
j'aurai souhaité savoir si quelqu'un pouvait m'aider à réaliser un script bash/python pour récupérer les 5 dernières valeurs d'une bdd hébergée sur phpmyadmin. Le tout est sur mon Raspberry 3.
 
J'arrive à m'y connecter, injecter des données dans la bdd, mais pas à extraire et envoyer vers un fichier.
 
Merci :)

Reply

Marsh Posté le 28-06-2022 à 12:20:47   

Reply

Marsh Posté le 28-06-2022 à 20:50:24    

Montre le code que tu utilises pour injecter des données. De mémoire pour en récupérer c'est un truc genre SELECT ... FROM ... ORDER BY ... LIMIT 5 ou quelque chose comme ça.

Reply

Marsh Posté le 28-06-2022 à 21:40:07    

rat de combat a écrit :

Montre le code que tu utilises pour injecter des données. De mémoire pour en récupérer c'est un truc genre SELECT ... FROM ... ORDER BY ... LIMIT 5 ou quelque chose comme ça.

 

Salut

 

j'ai ceci :

 
Code :
  1. <?php
  2. include 'connect.php';
  3. if(isset($_GET['pH']))
  4. {
  5. $pH=$_GET['pH'];
  6. }
  7. if(isset($_GET['chlore']))
  8. {
  9. $chlore=$_GET['chlore'];
  10. }
  11. if(isset($_GET['flow']))
  12. {
  13. $flow=$_GET['flow'];
  14. $sql  = 'INSERT INTO `ocr2022` (`id`, `date`, `pH` , `chlore`, `flow`) VALUES (NULL, UTC_TIMESTAMP,"'.$pH.'" , "'.$chlore.'", "'.$flow.'" )';
  15. if ($conn->query($sql) === TRUE) {
  16.     echo "Nouvelle entrée OK";
  17. } else {
  18.     echo "Erreur : " . $sql . "<br>" . $conn->error;
  19. }
  20. $conn->close();
  21. ?>
 

Merci


Message édité par dureiken le 28-06-2022 à 21:40:23
Reply

Marsh Posté le 28-06-2022 à 22:34:53    

Ok. Je suppose que les injections SQL c'est pas un soucis car le truc tourne en local uniquement?
 
Pour l'insertion, regarde donc un tuto SQL, car c'est ça le language qu'il faut. Comme je disais ça doit être un SELECT bidule..., mais je n'y connais rien. :o

Reply

Marsh Posté le 28-06-2022 à 23:04:16    

$sql  = 'SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5';


---------------
D3
Reply

Marsh Posté le 29-06-2022 à 08:04:39    

mechkurt a écrit :

$sql  = 'SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5';


 
Juste :
 

Code :
  1. <?php
  2. include 'connect.php';
  3. $sql  = 'SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5';
  4. if ($conn->query($sql) === TRUE) {
  5.     echo "Nouvelle entrée OK";
  6. } else {
  7.     echo "Erreur : " . $sql . "<br>" . $conn->error;
  8. }
  9. $conn->close();
  10. ?>


 
?
ca me donne erreur : Erreur : SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5
 
Merci de votre aide

Reply

Marsh Posté le 29-06-2022 à 10:40:50    

Il t'affiche juste ta variable $sql, apparemment $conn->error est vide.
 
En tout cas le code sql fournis est valide:
http://sqlfiddle.com/#!9/dddfae/1
 
Il doit y'avoir une autre erreur, peut être que ton utilisateur à des droits en écriture seul (c'est un peu bizarre la sécurité en général ce serait plutôt lecture seul ^^).
Tu dit avoir un phpmyadmin (qui n'est pas un moteur de base de donnée mais un affichage web pour la gérer), tu vois tes données, tu peux nous faire un export depuis là ?
Et confirmer le moteur de base de donnée utilisé ?
 
Donne aussi le code du fichier connect.php (tu peux masquer identifiant & mot de passe ^^) pour voir comment est instancier ta connexion à la base de donnée.


---------------
D3
Reply

Marsh Posté le 29-06-2022 à 10:45:21    

mechkurt a écrit :

Il t'affiche juste ta variable $sql, apparemment $conn->error est vide.
 
En tout cas le code sql fournis est valide:
http://sqlfiddle.com/#!9/dddfae/1
 
Il doit y'avoir une autre erreur, peut être que ton utilisateur à des droits en écriture seul (c'est un peu bizarre la sécurité en général ce serait plutôt lecture seul ^^).
Tu dit avoir un phpmyadmin (qui n'est pas un moteur de base de donnée mais un affichage web pour la gérer), tu vois tes données, tu peux nous faire un export depuis là ?
Et confirmer le moteur de base de donnée utilisé ?
 
Donne aussi le code du fichier connect.php (tu peux masquer identifiant & mot de passe ^^) pour voir comment est instancier ta connexion à la base de donnée.


 

Code :
  1. <?php
  2. $servername = "localhost";
  3. $username = "root";
  4. $password = "XXX";
  5. $dbname = "arduino";
  6. // Create connection
  7. $conn = new mysqli($servername, $username, $password, $dbname);
  8. // Check connection
  9. if ($conn->connect_error) {
  10.     die("Connection failed: " . $conn->connect_error);
  11. }
  12. ?>


 
voilou

Reply

Marsh Posté le 29-06-2022 à 11:13:42    

Je ne suis pas sur que les erreurs de ton connecteur bdd soient affiché...
 
https://www.php.net/manual/fr/mysql [...] t-mode.php
 
Essaye de modifiant ton code :  

Code :
  1. <?php
  2. $servername = "localhost";
  3. $username = "root";
  4. $password = "XXX";
  5. $dbname = "arduino";
  6. /* Activation du rapport d'erreur */
  7. $driver = new mysqli_driver();
  8. $driver->report_mode = MYSQLI_REPORT_ALL;
  9. // Create connection
  10. $conn = new mysqli($servername, $username, $password, $dbname);
  11. // Check connection
  12. if ($conn->connect_error) {
  13. die("Connection failed: " . $conn->connect_error);
  14. }
  15. try {
  16.     /* si la connexion échoue, une mysqli_sql_exception sera lancé */
  17.     $conn = new mysqli($servername, $username, $password, $dbname);
  18. } catch (mysqli_sql_exception $e) {
  19.     die($e->__toString());
  20. }
  21. ?>


et pour ton script récupérant les résultats :

Code :
  1. try {
  2. $result = $mysqli->query(" SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5 " );
  3. foreach ($result as $row) {
  4.  echo " id = " . $row['id'] . "<br>\n";
  5. }
  6. } catch (mysqli_sql_exception $e) {
  7.     die($e->__toString());
  8. }


---------------
D3
Reply

Marsh Posté le 29-06-2022 à 12:42:09    

alors j'ai mis ton script
 
si je change le MDP dans connect.php, ca n'affiche rien quand je vais sur la page pour tester ce qu'il se passe
 
si je mets le bon MDP mes anciens script marchent bien
 
pour le script recuperant les resultats, ca n'affiche rien
 

Reply

Marsh Posté le 29-06-2022 à 12:42:09   

Reply

Marsh Posté le 29-06-2022 à 15:59:32    

rajoute donc un printf("toto" ) (enfin le truc qui va bien en PHP :o ) pour voir si le script tourne ou pas du tout. Voir plusieurs printf().

Reply

Marsh Posté le 29-06-2022 à 18:51:08    

Regardes aussi tes logs php, y'a forcement un problème...
 
Si tu changes le mot de passe, la connexion devrait échouer et donc le die avec le message d'erreur être affiché.
Tu est en php combien ? apache combien ?
Tu peux faire un script avec juste :

Code :
  1. <?php
  2. phpinfo();
  3. ?>


Ça te donnera plein d'info (genre ou se trouve les logs ^^).


---------------
D3
Reply

Marsh Posté le 29-06-2022 à 18:59:42    

En error.log j'ai :
[Wed Jun 29 18:59:24.780542 2022] [:error] [pid 8451] [client 192.168.1.10:58016] PHP Fatal error:  Uncaught Error: Call to a member function query() on null in /var/www/html/chlore.php:6\nStack trace:\n#0 {main$
 

n°2420917
mechkurt
Posté le 29-06-2022 à 22:57:14  profilanswer
 

PHP Fatal error:  Uncaught Error: Call to a member function query() on null in /var/www/html/chlore.php:6
Le message est coupé mais l'objet de ta conexion est NULL donc ça ne peut pas fonctionner.
En regardant mon code je voie des conneries, réessaye avec ce code pour connect.php :

Reply

Marsh Posté le 29-06-2022 à 23:06:15    

alors sur la page web :
 
mysqli_sql_exception: No index used in query/prepared statement SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5 in /var/www/html/chlore.php:8 Stack trace: #0 /var/www/html/chlore.php(8): mysqli->query(' SELECT `id`, `...') #1 {main}
 
et dans error.log : plus rien :)
 
merci de ton aide, c'est quasi bon
 

Reply

Marsh Posté le 30-06-2022 à 07:53:50    

Tu peux mettre un index via phpmyadmin ou alors essayer :

Code :
  1. <?php
  2. $servername = "localhost";
  3. $username = "root";
  4. $password = "XXX";
  5. $dbname = "arduino";
  6. /* Activation du rapport d'erreur */
  7. $driver = new mysqli_driver();
  8. $driver->report_mode = MYSQLI_REPORT_ALL;
  9. // Create connection
  10. $conn = new mysqli($servername, $username, $password, $dbname);
  11. try {
  12.     /* si la connexion échoue, une mysqli_sql_exception sera lancé */
  13.     $conn = new mysqli($servername, $username, $password, $dbname);
  14. } catch (mysqli_sql_exception $e) {
  15.     die($e->__toString());
  16. }
  17. ?>
Code :
  1. ALTER TABLE `ocr2022` ADD PRIMARY KEY (`id`);


Ce qui est bizarre c'est que tu met NULL dans tes inserts, donc tu est bien en primary autoincrement sur ton id...
 
De toute façon c'est un warning pas truc qui vas faire planter, donc la c'est le catch & die qui empêche l’exécution du script.
 
Remplace  

Code :
  1. $driver->report_mode = MYSQLI_REPORT_ALL;


par

Code :
  1. $driver->report_mode = MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_INDEX;


 
Source : https://stackoverflow.com/questions [...] o-index-us
 
Et tu peux aussi modifier les die() dans les catchs par des print ou des echos pour que ça ne termine pas le code...


---------------
D3
Reply

Marsh Posté le 30-06-2022 à 08:34:31    

Salut

 

ca me donne ça :

 
Code :
  1. id = 1768
  2. id = 1767
  3. id = 1766
  4. id = 1765
  5. id = 1764
 

donc il va bien chercher les id (qui sont déjà en primaire, il y a la petite clé devant, et j'ai créé un index dessus)

 

Et donc ça marche en changeant la requete !! merci :)

 

PS : et tu saurais mettre ça dans un fichier ? que je puisse l'exploiter après ? merci (en gros j'en fais la moyenne et j'execute quelquechose après)


Message édité par dureiken le 30-06-2022 à 08:41:09
Reply

Marsh Posté le 30-06-2022 à 13:41:33    

Ben après tu peut faire ce que tu veux (peux :o ) en php, agréger des données dans un tableau, générer un csv, envoyer des données par mail, etc.
C'est un langage coté serveur qui peut faire tout un tas de truc, mais c'est dur de savoir à ta place de quoi tu as besoin...
 
Mais si tu n'ai pas très à l'aise en php/sql (on dirait en tout cas ^^), tu as ptet meilleur temps de récupérer ponctuellement les données via phpmyadmin et faire tes bidules dans excel.


---------------
D3
Reply

Marsh Posté le 30-06-2022 à 14:06:00    

ou passer sur un autre language, notamment le Python qui doit avoir une interface BD/SQL aussi...

Reply

Marsh Posté le 30-06-2022 à 14:22:45    

bon bah en bash
sudo mysql -u root -p --port=3306 -D arduino -e "SELECT id FROM ocr2022 ORDER BY id DESC LIMIT 5;" >> toto.txt

 

merci :)


Message édité par dureiken le 30-06-2022 à 14:22:56
Reply

Marsh Posté le 30-06-2022 à 14:26:32    

Ah ben tiens, on peut faire du SQL en bash. :lol:  
 
Par contre ce sudo il me paraît pas utile, c'est certainement possible de s'en passer avec la bonne configuration. Après pour un truc qui tourne strictement en local ça passe encore...

Reply

Marsh Posté le 30-06-2022 à 15:52:22    

2 jours a debbuger du php pour au final faire un script bash ! ^^
 
Comme quoi faut commencer pas spécifier son besoin et ces compétences avant de se lancer dans un truc...
Ce n'est pas un reproche, je n'avais aucune idée qu'on pouvait le faire en 1 ligne en bash, ou en tout cas dans mon cas j'aurais trouvé ça plus simple de le faire en php  [:airforceone]


---------------
D3
Reply

Marsh Posté le 01-07-2022 à 08:11:44    

Pas besoin d'être root. Tu crées un compte classique via phpmyadmin ou direct en ligne de commande.
Le binaire mysql permet de faire beaucoup de choses en ligne de commande (notamment de l'import/export de fichiers sql).
T'as aussi l'instruction sql SELECT INTO OUTFILE pour sortir un fichier type csv nativement avec mysql :
https://mariadb.com/kb/en/select-into-outfile/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 01-07-2022 à 15:13:19    

mechkurt a écrit :

2 jours a debbuger du php pour au final faire un script bash ! ^^

 

Comme quoi faut commencer pas spécifier son besoin et ces compétences avant de se lancer dans un truc...
Ce n'est pas un reproche, je n'avais aucune idée qu'on pouvait le faire en 1 ligne en bash, ou en tout cas dans mon cas j'aurais trouvé ça plus simple de le faire en php  [:airforceone]

 

Desole de t'avoir fait perdre du temps, je pensais faire en php mais c'était une erreur, comme tu as remarqué je ne suis pas un expert, loin de là !

 

si tu n'es pas rancunier : https://forum.hardware.fr/hfr/Progr [...] 8257_1.htm :)


Message édité par dureiken le 01-07-2022 à 15:19:10
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed

© 2018 Forum. All Rights Reserved.