Prisijunkite prie duomenų bazės iš PHP programavimo kalbos

Prisijunkite prie duomenų bazės iš PHP programavimo kalbos

Prisijunkite prie duomenų bazės iš PHP programavimo kalbos

Turinys

    IoT žiniatinklio serverisHTTP POST IoT žiniatinklio serverisMySQL duomenų bazė. IoT žiniatinklio serverisPHP kalbos IoT žiniatinklio serveris

    Šiame paskutiniame serijos straipsnyje apie Žiniatinklio serverio naudojimas duomenims iš įrenginių, prijungtų prie daiktų interneto, saugoti, paaiškina, kaip įrašyti į duomenų bazę MySQL informacija, kurią IoT mazgai siunčia serveriui, pateikdami HTTP POST užklausas. Šio straipsnio ir viso tinklaraščio skaitytojai gali būti nelabai susipažinę su programavimu PHP kalba bet tikrai taip su programavimu mikrovaldikliai kalbomis C o C + + taigi, išskyrus kai kurias detales, pvz., prieš dolerio ženklą ($) prieš kintamuosius, galėsite vadovautis pavyzdžiais be papildomų paaiškinimų, nes jie buvo atlikti vadovaujantis labai neutraliu programavimo stiliumi, nesusijusiu su kintamaisiais. PHP.

    Saugokite informaciją duomenų bazėje

    Kaip paaiškinta straipsnyje apie IoT duomenų saugojimas teikiant HTTP POST užklausas žiniatinklio serveriui, antraštės pabaigoje, POST užklausos turinyje yra duomenys, kurie siunčiami į serverį. Dažniausias būdas siųsti šią informaciją į serverį yra paprasto teksto formatu, nes ją lengviau analizuoti net „rankiniu būdu“. Kai į serverį siunčiami duomenys yra sudėtingi, juos tikrai bus patogu struktūrizuoti naudojant, pavyzdžiui, formatą XML o JSON. Įprastai naudojant žiniatinklio serverį informacijai tvarkyti iš įrenginių, prijungtų prie daiktų interneto, nėra įprasta duomenų struktūros, todėl įprasta juos siųsti paprastu tekstu tokiu formatu. variable=valor.

    Šio pavyzdžio HTTP POST užklausoje iš polaridad.es serverio prašoma resurso (paprastai tinklalapio) /iot/grabar_temperatura ir siunčiami trys kintamieji: ne, tp ir cr, kuriuose atitinkamai yra reikšmės " 12“, „10.26 » ir «2.18» Taip pat svarbu atsiminti, kad yra tuščia eilutė, skirta antraštėms atskirti nuo duomenų.

    Galutinis šio kodo tikslas PHP bus išsiųstas į duomenų bazės serverį MySQL įsakymas SQL:

    Su kuriuo bus sukurtas naujas įrašas (INSERT)
    šildymo duomenų bazėje (INTO calefacciones)
    priskyrimas laukams (numero_estancia,temperatura,corriente)
    reikšmės, atitinkančios HTTP POST užklausą VALUES (12, 10.26, 2.18)

    Prisijungimas prie duomenų bazės atliekamas naudojant funkciją mysqli_connect pagal formatą: mysqli_connect($servidor,$usuario,$clave,$base_datos) kuris grąžina žymeklį į ryšio objektą ir naudoja kintamuosius, kurie apibrėžia prieigą (pvz., vartotojo vardą, slaptažodį...) ir kurie anksčiau buvo priskirti būsimiems hipotetiniams tikslams scenarijuje.

    Norint nustatyti, ar ryšys buvo sėkmingas, naudojama funkcija mysqli_connect_errno() kuris grąžina galimą įvykusios klaidos numerį arba nulį (klaidinga), jei ryšys buvo užmegztas teisingai. Norėdami pranešti apie klaidas, programa, kuri pateikia HTTP užklausą, atsako nuliu reikšme, šiuo atveju programa, kuri vykdoma µC IoT mazgo.

    Prieš pridėdami prie teksto, kuris yra saugomas $consulta_sql su kuriuo sudaromas įsakymas SQL kuri siunčiama į duomenų bazės serverį, informacija, gauta į POST užklausos kintamuosius, yra iš anksto apdorojama, kad būtų išvengta atakos SQL injekcija. Ankstesniame pavyzdyje konvertavimas į atitinkamą duomenų tipą yra priverstinis (int) (sveikasis skaičius) arba (float) (slankiojo kablelio po kablelio), kurio pakaktų, kad būtų pašalintas galimas kenkėjiškas kodas, pridėtas prie užklausos duomenų interneto serveris.

    Kaip matyti, PHP kalba Taško simbolis (.) naudojamas jungiant tekstus, kurie sudaro tvarką SQL arba taško ir lygybės ženklo operatorius (.=), kad pridėtumėte tekstą į dešinę nuo to, kuriame jau saugomas kintamasis, o viena kabutė (') taip pat naudojama teksto konstantoms, o ne tik simboliams, įtraukti. Nors šiuo atveju taip pat galima naudoti dvigubas kabutes («), in PHP kalba yra naudojami turiniui apdoroti, pavyzdžiui, įtraukiant kintamuosius į tekstą formatu $texto="Me llamo $nombre"; kaip alternatyva formatui $texto='Me llamo '.$nombre; taip pat leidžia įtraukti vieno tipo kabutes į kitą, nenaudojant pabėgimo ženklų, kai dubliai kaitaliojasi pavieniuose arba viengubos dublikuose, kaip ir užduotyje $texto='esto no hay que "escaparlo" en PHP';.

    Norėdami vykdyti serverio užklausą MySQL funkcija naudojama mysqli_query su formatu mysqli_query($conexion,$consulta_sql) kuris kaip parametrus paima objekto ryšį su duomenų baze ir tekstą su tvarka SQL kuri buvo sudaryta.

    Funkcija mysqli_query($conexion,$consulta_sql) grąžina žymeklio objektą, kurį galima naudoti grąžinamiems duomenims pereiti, jei taikoma, arba, kaip aukščiau pateiktame pavyzdyje, gauti informacijos apie operaciją, konkrečiai norint žinoti indeksą, priskirtą naujam įrašui, kurį operacija sukūrė lentelėje " šildytuvai“ su funkcija mysqli_insert_id($conexion)

    Grąžinta vertė mysqli_query($conexion,$consulta_sql) gali įvertinti kaip false loginėje operacijoje, kad nustatytų, ar įvyko klaida. Ankstesniame pavyzdyje jis naudojamas norint grąžinti nulį programai, kuri pateikia POST užklausą, kaip ir ryšio klaidos atveju. Tokiu būdu programa grąžins skaičių, didesnį už nulį, kuris reiškia naujo įrašo indeksą, jei operacija teisinga, arba nulį, jei operacija sukelia klaidą.

    Norint atlaisvinti išteklius, kurie buvo priskirti duomenų bazės ryšiui, jis „uždaromas“ naudojant funkciją mysqli_close($conexion)

    Skaityti informaciją iš duomenų bazės

    Išskyrus architektūras rūko skaičiavimas Dauguma daiktų interneto mazgų apsiriboja jutiklių užfiksuotos informacijos siuntimu į serverį, ty interneto serveris Su jais bendrauja tik tam, kad saugotų informaciją, todėl su ankstesniu pavyzdžiu jau buvo išspręsta nemaža dalis atvejų, kurie kils šioje programoje. Kitas žingsnis galėtų būti sukurti svetainę, kurioje būtų rodomi prie daiktų interneto prijungtų įrenginių stebimi duomenys. front kuri nepatenka į tai, kas aptariama šioje mokymo priemonių serijoje.

    Gali atsitikti taip, kad daiktų interneto mazgas turi tam tikrą interaktyvumą ir elgiasi kitaip, remdamasis istoriniais duomenimis arba numato galimybę pakeisti savo elgesį pagal konfigūraciją, kuri jam ateina iš serverio, arba net mazgas yra ekranas, kuriame rodoma grafika. su duomenimis, kurie buvo neseniai stebimi, palyginti su gautais ankstesnėmis datomis. Visose šiose situacijose taip pat įdomu skaityti duomenis iš serverio MySQL per interneto serveris kaip parodyta toliau pateiktame pavyzdyje, kuris imituoja pavojaus būsenų datų, nustatytų pagal momentus, kai temperatūra viršijo 40°C, sąrašą.

    Aukščiau pateiktame pavyzdyje duomenų bazės užklausai naudojama komanda SQL SELECT pagal pagrindinį formatą SELECT campos FROM tabla WHERE condición ORDER BY campo DESC su vieninteliu ypatumu – funkcijų įtraukimu į datos lauką DAY, MONTH, YEAR y TIME norėdami gauti atskirai dieną, mėnesio numerį, metus ir laiką. Reikalaujama, kad temperatūra būtų aukštesnė nei 40.0 ir būtų tvarkoma naudojant datos lauką nuo aukščiausios (dabartinės) iki žemiausios (seniausios), nurodant tai su sąlyga DESC

    Norėdami peržiūrėti reikšmes, kurias užklausa grąžino iš kilpos for su žinomu matmeniu funkcija naudojama mysqli_num_rows($resultado) kuris nurodo rastų įrašų skaičių. Su funkcija mysqli_data_seek($resultado,$numero_resultado) rezultatų žymeklį galima perkelti į konkrečią padėtį, išreikštą kilpų skaitikliu for, $numero_resultado, pavyzdyje.

    Norint išsaugoti vektoriuje įrašo laukus, į kuriuos nukreipia rezultato žymeklis, naudojama funkcija mysqli_fetch_row($resultado) kuris priskiriamas kintamajam $registro kurios vėliau bus naudojamos formuojant frazę su skirtingomis reikšmėmis, pasiekiant jas pagal jų indeksus.

    Kai visos reikšmės bus perkeltos, užklausos rezultatui priskirti ištekliai išleidžiami SQL su funkcija mysqli_free_result($resultado)

    Apdorokite informaciją iš duomenų bazės. Palyginkite vertes.

    Kai kuriais atvejais patogu informacijos apdorojimą centralizuoti serveryje, net jei tai būtų galima padaryti daiktų interneto mazguose tokiu stiliumi rūko skaičiavimas. Šiame pavyzdyje modeliuojamos priežastys, dėl kurių taip elgiamasi, yra saugumas; Mazgas turi informaciją apie savo raktą (užraktą) ir apie užklausą (raktą), bet nežino, ar tinkama duoti kelią abiejų deriniui, todėl jis turi konsultuotis su serveriu, kuris priima sprendimą ir informuoja mazgą atsakydamas nuliu (nurodydamas nepavykusį palyginimą) arba vienetą (nurodydamas, kad palyginimas buvo sėkmingas), remdamasis jūsų duomenų bazės užklausos rezultatu.

    Su šiuo pasiteisinimu galite pamatyti pavyzdį, kuriame iš įrenginio, prijungto prie daiktų interneto, gaunami duomenys (rakto kodas ir užrakto kodas), grąžinamas rezultatas (vienas arba nulis, priklausomai nuo to, ar rezultatas teisingas ar klaidingas) ir atliekamas nedidelis informacijos apdorojimas, kurį sudaro duomenų bazėje gautų rezultatų palyginimas su daiktų interneto mazgo siunčiamais rezultatais.

    Ankstesniame pavyzdyje šešioliktainio skaičiaus funkcija naudojama norint gauti dešimtainį skaičių iš teksto, kuris reiškia šešioliktainį skaičių ir yra tas, kurį siunčia IoT įrenginys. Papildomas šios funkcijos naudojimo pranašumas yra tai, kad, kaip paaiškinta anksčiau, išvengiama atakos pridedant kodą SQL kenkia POST užklausos duomenims.

    Rašyti komentarą

    Galbūt praleidote