Accesați baza de date din limbajul de programare PHP

Accesați baza de date din limbajul de programare PHP

Accesați baza de date din limbajul de programare PHP

Cuprins

    Server web IoTServer web HTTP POST IoTBaza de date MySQL. Server web IoTPHP Language IoT Web Server

    În acest ultim articol din seria despre Utilizarea unui server web pentru a stoca date de pe dispozitivele conectate la Internetul lucrurilor, explică modul de înregistrare într-o bază de date MySQL informațiile pe care nodurile IoT le trimit către server care fac solicitări HTTP POST. Cititorii acestui articol, a întregului blog, s-ar putea să nu fie deosebit de familiarizați cu programarea în limbaj PHP dar sigur da cu programarea de microcontrolere în limbi C o C ++ deci, cu excepția unor detalii, cum ar fi precedarea semnului dolarului ($) la variabile, veți putea urma exemplele fără a fi nevoie de explicații suplimentare, deoarece acestea au fost făcute urmând un stil de programare foarte neutru, nespecific pentru PHP.

    Stocați informații în baza de date

    După cum se explică în articolul despre Stocarea datelor IoT prin efectuarea de solicitări HTTP POST către un server web, la sfârșitul antetelor, corpul cererii POST conține datele care sunt trimise către server. Cel mai comun mod de a trimite aceste informații către server este în format text simplu, deoarece este mai ușor să le analizezi chiar și „manual”. Când datele trimise către server sunt complexe, va fi cu siguranță convenabil să le structurați folosind, de exemplu, formatul XML o JSON. În utilizarea obișnuită a unui server web pentru gestionarea informațiilor de pe dispozitivele conectate la Internet of Things, nu este obișnuit să aveți nevoie de o structură de date, așa că este normal să le trimiteți în text simplu în format variable=valor.

    În solicitarea HTTP POST a exemplului următor, resursa (în mod normal o pagină web) /iot/grabar_temperatura este solicitată de la serverul polaridad.es și sunt trimise trei variabile: ne, tp și cr, care conțin, respectiv, valorile " 12”, „10.26” și «2.18» De asemenea, este important să rețineți că există o linie goală pentru a separa antetele de date.

    Scopul final al următorului cod PHP va trimite la serverul bazei de date MySQL comanda SQL:

    Cu care va fi creată o nouă înregistrare (INSERT)
    în baza de date de încălzire (INTO calefacciones)
    alocarea câmpurilor (numero_estancia,temperatura,corriente)
    valorile corespunzătoare solicitării HTTP POST VALUES (12, 10.26, 2.18)

    Conectarea la baza de date se face cu functia mysqli_connect dupa format: mysqli_connect($servidor,$usuario,$clave,$base_datos) care returnează un pointer către obiectul conexiune și care utilizează variabilele care definesc accesul (cum ar fi numele de utilizator, parola...) și care au fost atribuite anterior pentru utilizări ipotetice viitoare în script.

    Pentru a detecta dacă conexiunea a avut succes, se utilizează funcția mysqli_connect_errno() care returnează numărul de eroare care poate să fi apărut sau zero (fals) dacă conexiunea a fost stabilită corect. Pentru a notifica erori, aplicației care face cererea HTTP i se răspunde cu o valoare zero, în acest caz programul care este executat în µC a nodului IoT.

    Înainte de a adăuga textul care este stocat în $consulta_sql cu care se compune ordinul SQL care este trimis la serverul bazei de date, informațiile care au ajuns în variabilele de solicitare POST sunt preprocesate, cel puțin, pentru a evita un atac de către injecție SQL. În exemplul anterior, conversia la tipul de date corespunzător este forțată (int) (întreg) sau (float) (zecimal cu virgulă mobilă) care ar fi suficient pentru a elimina posibilul cod rău intenționat adăugat la datele de solicitare de server web.

    După cum se poate vedea, în limbaj PHP Simbolul punctului (.) este folosit pentru a concatena textele care formează ordinea SQL sau operatorul punct și semn egal (.=) pentru a adăuga text la dreapta celui care stochează deja o variabilă și ghilimele simple (‘) sunt, de asemenea, folosite pentru a include constante de text, nu doar caractere. Deși în acest caz pot fi folosite și ghilimele duble («), în limbaj PHP sunt folosite pentru a procesa conținutul, de exemplu, inclusiv variabilele din textul în format $texto="Me llamo $nombre"; ca alternativă la format $texto='Me llamo '.$nombre; de asemenea, permițându-vă să includeți ghilimele de un tip în altul fără a fi nevoie să utilizați semne de evadare ori de câte ori dublele alternează în cadrul single-urilor sau single-urilor în dublu, ca în sarcină $texto='esto no hay que "escaparlo" en PHP';.

    Pentru a executa interogarea către server MySQL funcția este utilizată mysqli_query cu formatul mysqli_query($conexion,$consulta_sql) care ia ca parametri obiectul-conexiunea la baza de date si textul cu comanda SQL care a fost compus.

    Funcția mysqli_query($conexion,$consulta_sql) returnează un obiect-cursor care poate fi folosit pentru a parcurge datele returnate dacă este cazul sau, ca în exemplul de mai sus, pentru a obține informații despre operație, în special pentru a cunoaște indexul atribuit noii înregistrări pe care operația a creat-o în tabel " încălzitoare” cu funcția mysqli_insert_id($conexion)

    Valoarea returnată de mysqli_query($conexion,$consulta_sql) poate evalua false într-o operație booleană pentru a determina că a apărut o eroare. În exemplul anterior este folosit pentru a returna, ca și în cazul erorii de conectare, un zero aplicației care face cererea POST. În acest fel, programul va returna un număr mai mare decât zero care reprezintă indexul noii înregistrări dacă operația este corectă sau un zero dacă operația produce o eroare.

    Pentru a elibera resursele care au fost alocate conexiunii la baza de date, aceasta este „închisă” folosind funcția mysqli_close($conexion)

    Citiți informații din baza de date

    Cu excepția arhitecturilor pentru calculul de ceață Majoritatea nodurilor IoT se limitează la a trimite informațiile capturate de senzorii lor către server, adică server web Comunică cu ei doar pentru a stoca informațiile, așa că cu exemplul anterior o bună parte din cazurile care vor apărea în această aplicație au fost deja rezolvate. Următorul pas ar putea fi crearea unui site web care să arate datele monitorizate de dispozitivele conectate la Internet of Things, o lucrare de front-end care este în afara celor discutate în această serie de tutoriale.

    Ce se poate întâmpla este ca un nod IoT să aibă o anumită interactivitate și să se comporte diferit pe baza unei date istorice sau să prevadă posibilitatea de a-și modifica comportamentul în funcție de o configurație care îi vine de la un server sau chiar nodul este un ecran care arată un grafic cu datele care au fost monitorizate recent comparativ cu cele dobândite la datele anterioare. Pentru toate aceste situații este și interesant să poți citi date de pe server MySQL prin intermediul server web așa cum este ilustrat în exemplul următor care simulează obținerea unei liste cu datele stărilor de alarmă determinate de momentele în care temperatura a depășit 40°C

    În exemplul de mai sus, pentru a interoga baza de date se folosește comanda SQL SELECT conform formatului de bază SELECT campos FROM tabla WHERE condición ORDER BY campo DESC cu singura particularitate de a adăuga funcțiile la câmpul de dată DAY, MONTH, YEAR y TIME pentru a obține separat ziua, numărul lunii, anul și ora. Condiția impusă este ca temperatura să fie mai mare de 40.0 și să fie ordonată folosind câmpul de dată de la cea mai mare (cea mai actuală) la cea mai mică (cea mai veche) indicându-l cu clauza DESC

    Pentru a parcurge în buclă valorile returnate de interogare dintr-o buclă for cu o dimensiune cunoscută se foloseşte funcţia mysqli_num_rows($resultado) care indică numărul de înregistrări care au fost găsite. Cu funcția mysqli_data_seek($resultado,$numero_resultado) cursorul de rezultate poate fi mutat într-o anumită poziție exprimată de contorul buclei for, $numero_resultado, în exemplu.

    Pentru a stoca într-un vector câmpurile înregistrării indicate de cursorul rezultat, se folosește funcția mysqli_fetch_row($resultado) care este atribuită variabilei $registro care ulterior va fi folosit pentru a forma o frază cu diferitele valori, accesându-le prin indicii lor.

    Odată ce toate valorile au fost parcurse, resursele alocate rezultatului interogării sunt eliberate SQL cu funcție mysqli_free_result($resultado)

    Procesați informațiile din baza de date. Comparați valorile.

    În unele ocazii este convenabil ca procesarea informațiilor să fie centralizată pe server chiar dacă ar fi posibil să se facă în nodurile IoT în stil calculul de ceață. În exemplul următor, motivele care sunt simulate pentru a face acest lucru sunt securitatea; Nodul are informații despre cheia sa (lacătul) și despre o cerere (cheie) dar nu știe dacă este cazul să cedeze loc combinației dintre ambele, așa că trebuie să consulte serverul, care este cel care ia decizia și informează nodul răspunzând zero (pentru a indica o comparație eșuată) sau unul (pentru a indica faptul că comparația a avut succes) pe baza rezultatului unei interogări la baza de date.

    Cu această scuză puteți vedea un exemplu în care se primesc date de la dispozitivul conectat la Internet of Things (un cod de cheie și un cod de blocare), se returnează un rezultat (unul sau zero în funcție de faptul că rezultatul este adevărat sau fals) și se efectuează o mică prelucrare a informațiilor constând în compararea rezultatelor obținute la consultarea bazei de date cu cele transmise de nodul IoT.

    În exemplul anterior, funcția hexdec este folosită pentru a obține un număr zecimal dintr-un text care reprezintă un număr hexazecimal și este cel trimis de dispozitivul IoT. Avantajul suplimentar al utilizării acestei funcții este acela de a evita, așa cum sa explicat mai înainte, un atac prin adăugarea de cod SQL rău intenționat pentru datele cererii POST.

    Posteaza un comentariu

    S-ar putea să fi ratat