Prístup k databáze z programovacieho jazyka PHP

Prístup k databáze z programovacieho jazyka PHP

Prístup k databáze z programovacieho jazyka PHP

Obsah

    IoT webový serverHTTP POST IoT webový serverDatabáza MySQL. IoT webový serverWebový server IoT v jazyku PHP

    V tomto poslednom článku zo série o Používanie webového servera na ukladanie údajov zo zariadení pripojených k internetu vecí, vysvetľuje, ako zaznamenávať do databázy MySQL informácie, ktoré uzly IoT odosielajú na server a vytvárajú požiadavky HTTP POST. Čitatelia tohto článku, celého blogu, nemusia byť obzvlášť oboznámení s programovaním v jazyk PHP ale určite áno s programovaním mikrokontroléry v jazykoch C o C + + takže okrem niektorých detailov, ako je napríklad znak dolára ($) pred premennými, budete môcť postupovať podľa príkladov bez potreby ďalšieho vysvetlenia, pretože boli urobené podľa veľmi neutrálneho štýlu programovania, ktorý nie je špecifický pre PHP.

    Uložte informácie do databázy

    Ako je vysvetlené v článku o Ukladanie údajov IoT vytváraním požiadaviek HTTP POST na webový server, na konci hlavičiek obsahuje telo požiadavky POST údaje, ktoré sa odosielajú na server. Najbežnejší spôsob odosielania týchto informácií na server je vo formáte obyčajného textu, pretože je jednoduchšie ich analyzovať aj „ručne“. Keď sú dáta odosielané na server zložité, určite bude vhodné ich štruktúrovať napríklad pomocou formátu XML o JSON. Pri bežnom používaní webového servera na správu informácií zo zariadení pripojených k internetu vecí nie je bežné potrebovať dátovú štruktúru, takže je normálne posielať ich ako čistý text vo formáte variable=valor.

    V požiadavke HTTP POST v nasledujúcom príklade je zdroj (zvyčajne webová stránka) /iot/grabar_temperatura požadovaný zo servera polaridad.es a sú odoslané tri premenné: ne, tp a cr, ktoré obsahujú hodnoty " 12", "10.26" a «2.18» Je tiež dôležité pamätať na to, že na oddelenie hlavičiek od údajov je prázdny riadok.

    Konečný cieľ nasledujúceho kódu PHP odošle na databázový server MySQL poradie SQL:

    Pomocou ktorého sa vytvorí nový záznam (INSERT)
    v databáze vykurovania (INTO calefacciones)
    priraďovanie k poliam (numero_estancia,temperatura,corriente)
    hodnoty zodpovedajúce požiadavke HTTP POST VALUES (12, 10.26, 2.18)

    Pripojenie k databáze sa vykonáva pomocou funkcie mysqli_connect podľa formátu: mysqli_connect($servidor,$usuario,$clave,$base_datos) ktorý vracia smerník na objekt pripojenia a ktorý používa premenné, ktoré definujú prístup (ako je používateľské meno, heslo...) a ktoré boli predtým priradené pre budúce hypotetické použitie v skripte.

    Na zistenie, či bolo pripojenie úspešné, sa používa funkcia mysqli_connect_errno() ktorý vráti číslo chyby, ktorá sa mohla vyskytnúť, alebo nulu (nepravda), ak bolo spojenie nadviazané správne. Na upozornenie na chyby aplikácia, ktorá vytvára požiadavku HTTP, odpovedá hodnotou nula, v tomto prípade program, ktorý je spustený v uC uzla IoT.

    Pred pridaním k textu, ktorý je uložený v $consulta_sql s ktorými sa objednávka skladá SQL ktorý sa odošle na databázový server, informácie, ktoré prišli do premenných požiadavky POST, sú minimálne predspracované, aby sa predišlo útoku SQL injekcia. V predchádzajúcom príklade je vynútená konverzia na zodpovedajúci typ údajov (int) (celé číslo) alebo (float) (s pohyblivou desatinnou čiarkou), čo by stačilo na elimináciu prípadného škodlivého kódu pridaného do údajov požiadavky webový server.

    Ako je vidieť, v jazyk PHP Symbol obdobia (.) sa používa na zreťazenie textov tvoriacich objednávku SQL alebo operátor bodka a rovná sa (.=) na pridanie textu napravo od toho, ktorý už obsahuje premennú, a jednoduché úvodzovky (‘) sa tiež používajú na uzavretie textových konštánt, nielen znakov. Hoci v tomto prípade možno použiť aj dvojité úvodzovky («), v jazyk PHP sa používajú na spracovanie obsahu, napríklad vrátane premenných v rámci textu vo formáte $texto="Me llamo $nombre"; ako alternatívu k formátu $texto='Me llamo '.$nombre; tiež vám umožňuje zahrnúť úvodzovky jedného typu do druhého bez toho, aby ste museli používať únikové znaky vždy, keď sa štvorhra strieda v dvojhre alebo dvojhra v štvorhre, ako je to v zadaní $texto='esto no hay que "escaparlo" en PHP';.

    Na vykonanie dotazu na server MySQL používa sa funkcia mysqli_query s formátom mysqli_query($conexion,$consulta_sql) ktorý berie ako parametre objektové spojenie s databázou a text s objednávkou SQL ktorý bol zložený.

    Funkcia mysqli_query($conexion,$consulta_sql) vráti objekt kurzora, ktorý možno použiť na prechádzanie vrátených údajov, ak je to vhodné, alebo, ako v príklade vyššie, na získanie informácií o operácii, konkrétne na zistenie indexu priradeného k novému záznamu, ktorý operácia vytvorila v tabuľke " ohrievače“ s funkciou mysqli_insert_id($conexion)

    Hodnota vrátená používateľom mysqli_query($conexion,$consulta_sql) môže vyhodnotiť ako nepravda v boolovskej operácii, aby určil, že sa vyskytla chyba. V predchádzajúcom príklade sa používa na vrátenie, ako v prípade chyby pripojenia, nuly do aplikácie, ktorá vytvára požiadavku POST. Týmto spôsobom program vráti číslo väčšie ako nula, ktoré predstavuje index nového záznamu, ak je operácia správna, alebo nulu, ak operácia spôsobí chybu.

    Aby sa uvoľnili prostriedky, ktoré boli priradené k pripojeniu k databáze, je "uzavreté" pomocou funkcie mysqli_close($conexion)

    Prečítajte si informácie z databázy

    Okrem architektúr pre fog computing Väčšina IoT uzlov sa obmedzuje na odosielanie informácií zachytených ich senzormi na server, teda server webový server Komunikuje s nimi len za účelom uloženia informácií, takže s predchádzajúcim príkladom už bola vyriešená veľká časť prípadov, ktoré v tejto aplikácii nastanú. Ďalším krokom by mohlo byť vytvorenie webovej stránky, ktorá zobrazuje údaje monitorované zariadeniami pripojenými k internetu vecí frontend čo je mimo toho, čo je zahrnuté v tejto sérii tutoriálov.

    Môže sa stať, že uzol internetu vecí má určitú interaktivitu a správa sa odlišne na základe historických údajov alebo predvída možnosť zmeniť svoje správanie podľa konfigurácie, ktorá k nemu prichádza zo servera, alebo dokonca uzol je obrazovka s grafom. s údajmi, ktoré boli nedávno monitorované v porovnaní s údajmi získanými v predchádzajúcich dátumoch. Pre všetky tieto situácie je zaujímavá aj možnosť čítať dáta zo servera MySQL cez webový server ako je znázornené v nasledujúcom príklade, ktorý simuluje získanie zoznamu dátumov poplachových stavov určených okamihmi, v ktorých teplota prekročila 40 °C

    Vo vyššie uvedenom príklade sa na dotazovanie databázy použije príkaz SQL SELECT podľa základného formátu SELECT campos FROM tabla WHERE condición ORDER BY campo DESC s jedinou zvláštnosťou pridávania funkcií do dátumového poľa DAY, MONTH, YEAR y TIME s cieľom získať oddelene deň, číslo mesiaca, rok a čas. Podmienkou je, že teplota je vyššia ako 40.0 a je usporiadaná pomocou dátumového poľa od najvyššej (najaktuálnejšie) po najnižšie (najstaršie), čo ju označuje klauzulou DESC

    Prechádzať cez hodnoty vrátené dotazom zo slučky for so známym rozmerom sa funkcia používa mysqli_num_rows($resultado) čo udáva počet nájdených záznamov. S funkciou mysqli_data_seek($resultado,$numero_resultado) výsledkový kurzor je možné presunúť na konkrétnu pozíciu vyjadrenú počítadlom slučiek for, $numero_resultado, v príklade.

    Funkcia sa používa na uloženie polí záznamu, na ktoré ukazuje výsledkový kurzor, do vektora mysqli_fetch_row($resultado) ktorá je priradená k premennej $registro ktoré sa neskôr použijú na vytvorenie frázy s rôznymi hodnotami, pričom sa k nim pristupuje pomocou ich indexov.

    Po prekročení všetkých hodnôt sa uvoľnia zdroje priradené k výsledku dotazu SQL s funkciou mysqli_free_result($resultado)

    Spracovať informácie z databázy. Porovnajte hodnoty.

    V niektorých prípadoch je vhodné, aby bolo spracovanie informácií centralizované na serveri, aj keď by to bolo možné urobiť v uzloch internetu vecí štýlom fog computing. V nasledujúcom príklade sú dôvody, ktoré sú na to simulované, bezpečnosť; Uzol má informácie o svojom kľúči (zámku) a o požiadavke (kľúč), ale nevie, či je vhodné ustúpiť kombinácii oboch, preto sa musí poradiť so serverom, ktorý rozhoduje a informuje uzol odpovedaním nula (označenie neúspešného porovnania) alebo jedna (označenie úspešného porovnania) na základe výsledku dotazu na vašu databázu.

    S touto výhovorkou môžete vidieť príklad, v ktorom sa prijímajú údaje zo zariadenia pripojeného k internetu vecí (kód kľúča a kód zámku), vracia sa výsledok (jedna alebo nula v závislosti od toho, či je výsledok pravdivý alebo nepravdivý) a vykonáva sa malé spracovanie informácií, ktoré pozostáva z porovnania výsledkov získaných pri konzultácii s databázou s výsledkami odoslanými uzlom internetu vecí.

    V predchádzajúcom príklade sa funkcia hexdec používa na získanie desiatkového čísla z textu, ktorý predstavuje hexadecimálne číslo a ktoré odosiela IoT zariadenie. Ďalšou výhodou použitia tejto funkcie je vyhnúť sa, ako už bolo vysvetlené, útoku pridaním kódu SQL škodlivé pre údaje požiadavky POST.

    Pridať komentár

    Možno ste zmeškali