Juurdepääs andmebaasile PHP programmeerimiskeelest

Juurdepääs andmebaasile PHP programmeerimiskeelest

Juurdepääs andmebaasile PHP programmeerimiskeelest

Sisukord

    IoT veebiserverHTTP POST IoT veebiserverMySQL andmebaas. IoT veebiserverPHP keele IoT veebiserver

    Selles sarja viimases artiklis teemal Veebiserveri kasutamine asjade Internetiga ühendatud seadmete andmete salvestamiseks, selgitab, kuidas andmebaasi salvestada MySQL teave, mille IoT-sõlmed saadavad serverile, mis teeb HTTP POST-päringuid. Selle artikli ja kogu ajaveebi lugejad ei pruugi olla programmide programmeerimisega eriti kursis PHP keel aga programmeerimisega kindlasti jah mikrokontrollerid keeltes C o C + + nii et, välja arvatud mõned üksikasjad, nagu näiteks dollarimärgi ($) eelmine muutujatele, saate näiteid järgida ilma täiendavate selgitusteta, kuna need on tehtud väga neutraalse programmeerimisstiili järgi, mis ei ole spetsiifiline PHP.

    Salvestage teave andmebaasis

    Nagu on selgitatud artiklis teemal IoT andmete salvestamine, tehes veebiserverisse HTTP POST-päringuid, POST-päringu sisu sisaldab päiste lõpus andmeid, mis saadetakse serverisse. Kõige tavalisem viis selle teabe serverisse saatmiseks on lihttekstivormingus, kuna seda on lihtsam isegi "käsitsi" analüüsida. Kui serverisse saadetavad andmed on keerulised, on neid kindlasti mugav struktureerida, kasutades näiteks vormingut XML o JSON. Tavapärasel veebiserveri kasutamisel asjade Internetiga ühendatud seadmete teabe haldamiseks ei ole andmestruktuur vajalik, seega on tavaline saata need lihttekstina vormingus. variable=valor.

    Järgmise näite HTTP POST päringus küsitakse polaridad.es serverilt ressurssi (tavaliselt veebilehte) /iot/grabar_temperatura ja saadetakse kolm muutujat: ne, tp ja cr, mis sisaldavad vastavalt väärtusi " 12", "10.26 » ja «2.18» Samuti on oluline meeles pidada, et päiste andmetest eraldamiseks on tühi rida.

    Järgmise koodi lõppeesmärk PHP saadab andmebaasiserverisse MySQL korraldus SQL:

    Millega luuakse uus kirje (INSERT)
    kütteandmebaasis (INTO calefacciones)
    väljadele määramine (numero_estancia,temperatura,corriente)
    väärtused, mis vastavad HTTP POST-i päringule VALUES (12, 10.26, 2.18)

    Ühendus andmebaasiga toimub funktsiooniga mysqli_connect vastavalt vormingule: mysqli_connect($servidor,$usuario,$clave,$base_datos) mis tagastab kursori ühendusobjektile ja kasutab muutujaid, mis määravad juurdepääsu (nt kasutajanimi, parool...) ja mis on skriptis edaspidiseks hüpoteetiliseks kasutamiseks määratud.

    Ühenduse õnnestumise tuvastamiseks kasutatakse funktsiooni mysqli_connect_errno() mis tagastab tekkida võinud vea numbri või nulli (väär), kui ühendus loodi õigesti. Vigadest teavitamiseks vastatakse HTTP päringu esitavale rakendusele väärtusega null, antud juhul programmile, mis käivitatakse µC IoT sõlmest.

    Enne salvestatud tekstile lisamist $consulta_sql millega tellimus koostatakse SQL mis saadetakse andmebaasiserverisse, töödeldakse POST-i päringu muutujates saabunud infot vähemalt eeltöödeldud, et vältida rünnakut SQL-i süstimine. Eelmises näites on teisendamine vastavaks andmetüübiks sunnitud (int) (täisarv) või (float) (ujukoma kümnend), millest piisaks, et kõrvaldada võimalik pahatahtlik kood, mis on lisatud päringu andmetele veebiserver.

    Nagu näha, on PHP keel Järjekorda moodustavate tekstide ühendamiseks kasutatakse perioodi sümbolit (.). SQL või punkti ja võrdusmärgi operaatorit (.=), et lisada tekst paremale muutujast, mis juba salvestab, ja ühtset jutumärki (‘) kasutatakse ka tekstikonstantide, mitte ainult märkide lisamiseks. Kuigi sel juhul võib kasutada ka jutumärke («), siis sisse PHP keel kasutatakse näiteks sisu töötlemiseks, kaasates vormingusse muutujad teksti sees $texto="Me llamo $nombre"; alternatiivina vormingule $texto='Me llamo '.$nombre; Samuti võimaldab teil lisada ühte tüüpi jutumärke teises ilma, et peaksite kasutama paomärke alati, kui duublid vahelduvad üksiksõnade sees või üksikud kahekohalistes, nagu ülesandes $texto='esto no hay que "escaparlo" en PHP';.

    Päringu täitmiseks serverisse MySQL funktsiooni kasutatakse mysqli_query vorminguga mysqli_query($conexion,$consulta_sql) mis võtab parameetritena objekti-ühenduse andmebaasiga ja teksti tellimusega SQL mis on koostatud.

    Funktsioon mysqli_query($conexion,$consulta_sql) tagastab kursoriobjekti, mida saab kasutada tagastatud andmete läbimiseks, kui see on asjakohane, või, nagu ülaltoodud näites, toimingu kohta teabe hankimiseks, täpsemalt selleks, et teada saada tabelisse operatsiooni loodud uuele kirjele määratud indeksit " küttekehad" funktsiooniga mysqli_insert_id($conexion)

    Tagastatud väärtus mysqli_query($conexion,$consulta_sql) saab anda tõeväärtusoperatsiooni väärtuseks Väär, et teha kindlaks, kas tõrge on ilmnenud. Eelmises näites kasutatakse seda POST-i päringu esitavale rakendusele nulli tagastamiseks, nagu ühenduse vea korral. Sel viisil tagastab programm nullist suurema arvu, mis tähistab uue kirje indeksit, kui toiming on õige, või nulli, kui toiming tekitab vea.

    Andmebaasiühendusele määratud ressursside vabastamiseks "sulgetakse" see funktsiooni abil mysqli_close($conexion)

    Lugege andmebaasist teavet

    Välja arvatud arhitektuurides uduarvutus Enamik IoT-sõlmi piirdub oma andurite jäädvustatud teabe saatmisega serverisse, st veebiserver See suhtleb nendega ainult teabe salvestamiseks, nii et eelmise näite puhul on suur osa selles rakenduses esilekerkivatest juhtumitest juba lahendatud. Järgmise sammuna võiks luua veebilehe, mis näitab asjade internetti ühendatud seadmete jälgitavaid andmeid. frontend mis jääb väljapoole selles õpetuste sarjas käsitletavat.

    Mis võib juhtuda, on see, et asjade Interneti-sõlm on teatud interaktiivsusega ja käitub ajalooliste andmete põhjal erinevalt või näeb ette võimaluse muuta oma käitumist vastavalt serverist saabuvale konfiguratsioonile või isegi sõlm on ekraan, mis näitab graafikut. andmetega, mida on hiljuti jälgitud võrreldes eelmistel kuupäevadel omandatud andmetega. Kõigi nende olukordade puhul on huvitav ka võimalus lugeda serverist andmeid MySQL läbi veebiserver nagu on illustreeritud järgmises näites, mis simuleerib häireseisundite kuupäevade loendi saamist, mis on määratud hetkedega, mil temperatuur ületas 40 °C

    Ülaltoodud näites kasutatakse andmebaasi päringu tegemiseks käsku SQL SELECT vastavalt põhivormingule SELECT campos FROM tabla WHERE condición ORDER BY campo DESC ainsa eripäraga on funktsioonide lisamine kuupäevaväljale DAY, MONTH, YEAR y TIME selleks, et saada eraldi päev, kuu number, aasta ja kellaaeg. Kehtestatud tingimus on, et temperatuur on kõrgem kui 40.0 ja see on järjestatud kuupäevavälja abil kõrgeimast (kõige praegusest) madalaima (vanimani), mis näitab seda koos klausliga DESC

    Päringu poolt tsüklist tagastatud väärtuste sirvimiseks for teadaoleva mõõtmega funktsiooni kasutatakse mysqli_num_rows($resultado) mis näitab leitud kirjete arvu. Funktsiooniga mysqli_data_seek($resultado,$numero_resultado) tulemuste kursori saab liigutada tsükliloenduriga väljendatud kindlasse kohta for, $numero_resultado, näites.

    Et salvestada vektorisse kirje väljad, millele tulemuse kursor osutab, kasutatakse funktsiooni mysqli_fetch_row($resultado) mis on omistatud muutujale $registro mida hiljem kasutatakse erinevate väärtustega fraasi moodustamiseks, pääsedes neile juurde nende indeksite kaudu.

    Kui kõik väärtused on läbitud, vabastatakse päringu tulemusele määratud ressursid SQL funktsiooniga mysqli_free_result($resultado)

    Andmebaasi teabe töötlemine. Võrrelge väärtusi.

    Mõnel juhul on mugav teabetöötlust serverisse koondada isegi siis, kui seda oleks võimalik teha IoT sõlmedes stiilis uduarvutus. Järgmises näites on simuleeritud põhjused turvalisus; Sõlmel on teavet oma võtme (luku) ja päringu (võti) kohta, kuid ta ei tea, kas mõlema kombinatsioonile on sobilik teed anda, seega peab ta konsulteerima serveriga, kes teeb otsuse ja teavitab sõlme, vastates teie andmebaasi päringu tulemusele nulliga (ebaõnnestunud võrdluse tähistamiseks) või ühega (võrdluse õnnestumise näitamiseks).

    Selle vabandusega näete näidet, kus asjade internetti ühendatud seadmest võetakse vastu andmeid (võtmekood ja lukukood), tagastatakse tulemus (üks või null, olenevalt tulemusest tõene või väär) ja toimub teabe väike töötlemine, mis seisneb andmebaasis tutvumisel saadud tulemuste võrdlemises asjade Interneti sõlme saadetud tulemustega.

    Eelmises näites kasutatakse kuueteistkümnendsüsteemi funktsiooni kuueteistkümnendarvu saamiseks tekstist, mis esindab kuueteistkümnendsüsteemi ja on IoT-seadme saadetud arv. Selle funktsiooni kasutamise lisaeelis on, nagu eelnevalt selgitatud, koodi lisamisega rünnaku vältimine SQL pahatahtlik POST-päringu andmete suhtes.

    Postita kommentaar

    Võib-olla jäite vahele