Az adatbázis elérése a PHP programozási nyelvből

Az adatbázis elérése a PHP programozási nyelvből

Az adatbázis elérése a PHP programozási nyelvből

Tartalomjegyzék

    IoT webszerverHTTP POST IoT webszerverMySQL adatbázis. IoT webszerverPHP nyelvű IoT webszerver

    A sorozat utolsó cikkében a Webszerver használata a tárgyak internetéhez csatlakoztatott eszközökről származó adatok tárolására, elmagyarázza, hogyan kell rögzíteni az adatbázisban MySQL az IoT-csomópontok által a HTTP POST kéréseket végző kiszolgálónak elküldött információk. Ennek a cikknek, az egész blognak az olvasói nem feltétlenül ismerik a programozást a PHP nyelv de a programozással biztosan igen mikrovezérlők nyelvekben C o C + + így néhány részlet kivételével, például a dollárjel ($) előtt a változók előtt, a példákat további magyarázat nélkül követheti, mivel nagyon semleges programozási stílust követve készültek, nem specifikusak PHP.

    Tárolja az információkat az adatbázisban

    Amint azt a cikkben kifejtettük IoT-adattárolás HTTP POST-kérések webszerver felé történő küldésével, a fejlécek végén a POST kérés törzse tartalmazza a szervernek küldött adatokat. Ennek az információnak a szervernek való elküldésének legáltalánosabb módja az egyszerű szöveges formátum, mivel egyszerűbb akár „kézi” elemzése is. Ha a szerverre küldött adatok összetettek, akkor biztosan kényelmes lesz azokat például a formátum használatával strukturálni XML o JSON. A dolgok internetére csatlakoztatott eszközökről származó információk kezelésére szolgáló webszerverek szokásos használatában nem gyakori, hogy szükség van adatszerkezetre, ezért normális, ha azokat egyszerű szövegben, a következő formátumban küldjük el. variable=valor.

    A következő példa HTTP POST kérésében a /iot/grabar_temperatura erőforrás (általában egy weboldal) lekérésre kerül a polaridad.es szervertől, és három változó kerül elküldésre: ne, tp és cr, amelyek rendre az értékeket tartalmazzák" 12", "10.26" és «2.18» Fontos megjegyezni, hogy van egy üres sor, amely elválasztja a fejléceket az adatoktól.

    A következő kód végső célja PHP elküldi az adatbázis-kiszolgálónak MySQL a megrendelés SQL:

    mellyel új rekord jön létre (INSERT)
    a fűtési adatbázisban (INTO calefacciones)
    mezőkhöz való hozzárendelés (numero_estancia,temperatura,corriente)
    a HTTP POST kérésnek megfelelő értékeket VALUES (12, 10.26, 2.18)

    Az adatbázishoz való kapcsolódás a függvénnyel történik mysqli_connect formátum szerint: mysqli_connect($servidor,$usuario,$clave,$base_datos) amely egy mutatót ad vissza a kapcsolódási objektumhoz, és a hozzáférést meghatározó változókat (például felhasználó, jelszó...) használja, amelyeket korábban a szkriptben a jövőbeni hipotetikus felhasználásokhoz rendeltek hozzá.

    A funkció segítségével megállapítható, hogy a kapcsolat sikeres volt-e mysqli_connect_errno() amely visszaadja az esetlegesen előforduló hibaszámot vagy nullát (hamis), ha a kapcsolat megfelelően jött létre. A hibaértesítéshez a HTTP kérést küldő alkalmazás nulla értékkel válaszol, ebben az esetben az a program, amelyik a µC az IoT-csomópontról.

    Mielőtt hozzáadna a tárolt szöveghez $consulta_sql amellyel a rendet összeállítják SQL az adatbázis-kiszolgálónak elküldve a POST kérési változókban érkezett információkat legalább előfeldolgozásra kerül, hogy elkerüljük a SQL injekció. Az előző példában a megfelelő adattípusra való átalakítás kényszerített (int) (egész) vagy (float) (lebegőpontos tizedes), amely elegendő lenne a kérésadatokhoz hozzáadott esetleges rosszindulatú kódok eltávolításához szerver web.

    Mint látható, a PHP nyelv A periódusszimbólum (.) a sorrendet alkotó szövegek összefűzésére szolgál SQL vagy a pont- és egyenlőségjel-operátor (.=) szöveget ad a már változót tároló változó jobb oldalára, és az egyetlen idézőjel (') szövegkonstansok bezárására is szolgál, nem csak karakterek közé. Bár ebben az esetben a kettős idézőjel («) is használható, in PHP nyelv A tartalom feldolgozására szolgálnak, például a szövegen belüli változókat a formátumba $texto="Me llamo $nombre"; a formátum alternatívájaként $texto='Me llamo '.$nombre; lehetővé teszi az egyik típusú idézőjel beillesztését a másikba anélkül, hogy menekülő jeleket kellene használnia, amikor a duplák váltakoznak az egyesben, vagy az egyesek a kettősben, mint a feladatban $texto='esto no hay que "escaparlo" en PHP';.

    A lekérdezés végrehajtása a szerver felé MySQL funkciót használják mysqli_query a formátummal mysqli_query($conexion,$consulta_sql) amely paraméterként veszi az objektum-kapcsolatot az adatbázishoz és a szöveget a megrendeléssel SQL amely összeállításra került.

    A funkció mysqli_query($conexion,$consulta_sql) egy kurzorobjektumot ad vissza, amely adott esetben használható a visszaadott adatok bejárására, vagy a fenti példához hasonlóan a műveletről információk beszerzésére, különösen a művelet által a táblázatban létrehozott új rekordhoz rendelt index megismerésére " fűtőtestek" funkcióval mysqli_insert_id($conexion)

    A visszaadott érték mysqli_query($conexion,$consulta_sql) hamisra tud értékelni egy logikai műveletben annak megállapítására, hogy hiba történt. Az előző példában a POST kérést küldő alkalmazásnak nullát ad vissza, mint a kapcsolódási hiba esetén. Ily módon a program egy nullánál nagyobb számot ad vissza, amely az új rekord indexét jelenti, ha a művelet helyes, vagy egy nullát, ha a művelet hibát produkál.

    Az adatbázis-kapcsolathoz rendelt erőforrások felszabadítása érdekében a kapcsolat „bezárásra kerül” a funkció segítségével mysqli_close($conexion)

    Olvasson információkat az adatbázisból

    Kivéve az architektúrákban köd számítástechnika A legtöbb IoT-csomópont arra korlátozódik, hogy az érzékelői által rögzített információkat elküldi a szervernek, azaz a szerver web Csak az információ tárolása érdekében kommunikál velük, így az előző példával az ebben az alkalmazásban felmerülő esetek jó része már megoldódott. A következő lépés egy olyan weboldal létrehozása lehet, amely a tárgyak internetéhez csatlakoztatott eszközök által megfigyelt adatokat jeleníti meg. frontend amely kívül esik az oktatóanyag-sorozatban tárgyaltakon.

    Megtörténhet, hogy egy IoT-csomópont bizonyos interaktivitással rendelkezik, és másként viselkedik egy előzményadatok alapján, vagy előre látja annak lehetőségét, hogy megváltoztassa viselkedését a szerverről érkező konfiguráció szerint, vagy akár a csomópont egy grafikont megjelenítő képernyő. a közelmúltban megfigyelt adatokkal a korábbi dátumokhoz képest. Mindezen helyzetekben az is érdekes, hogy adatokat olvashatunk a szerverről MySQL keresztül szerver web a következő példában bemutatott módon, amely szimulálja a riasztási állapotok dátumainak listáját, amelyet azon pillanatok határoznak meg, amikor a hőmérséklet meghaladta a 40 °C-ot

    A fenti példában az adatbázis lekérdezéséhez a parancsot használjuk SQL SELECT az alapformátum szerint SELECT campos FROM tabla WHERE condición ORDER BY campo DESC azzal az egyetlen különlegességgel, hogy a függvényeket hozzáadjuk a dátum mezőhöz DAY, MONTH, YEAR y TIME a nap, a hónap, az év és az idő külön-külön történő megszerzéséhez. A feltétel az, hogy a hőmérséklet nagyobb legyen 40.0-nál, és a dátum mezőben legyen rendezve a legmagasabbtól (legaktuálisabb) a legalacsonyabbig (legrégebbiig), a záradékkal jelezve. DESC

    A lekérdezés által visszaadott értékek ciklusból való végigjátszása for ismert mérettel a függvényt használjuk mysqli_num_rows($resultado) amely a talált rekordok számát jelzi. A funkcióval mysqli_data_seek($resultado,$numero_resultado) az eredmény kurzort a hurokszámláló által kifejezett meghatározott pozícióba lehet mozgatni for, $numero_resultado, a példában.

    Az eredmény kurzor által mutatott rekord mezőinek vektorban való tárolásához a függvényt használjuk mysqli_fetch_row($resultado) amely a változóhoz van rendelve $registro amelyeket később a különböző értékeket tartalmazó kifejezések kialakítására használnak fel, és indexeik alapján érik el őket.

    Miután az összes értéket bejárta, a lekérdezés eredményéhez rendelt erőforrások felszabadulnak SQL funkcióval mysqli_free_result($resultado)

    Az adatbázisból származó információk feldolgozása. Hasonlítsa össze az értékeket.

    Egyes esetekben kényelmes az információfeldolgozás központosítása a szerveren, még akkor is, ha ez az IoT csomópontokban lehetséges köd számítástechnika. A következő példában a szimulált okok a biztonság; A csomópont rendelkezik információval a kulcsáról (zárról) és egy kérésről (kulcsról), de nem tudja, hogy helyénvaló-e utat engedni a kettő kombinációjának, ezért konzultálnia kell a szerverrel, amely a döntést hozza és tájékoztatja a csomópontot úgy, hogy nullát (a sikertelen összehasonlítás jelzésére) vagy egyet (az összehasonlítás sikerességét jelezve) válaszol az adatbázis lekérdezésének eredménye alapján.

    Ezzel a kifogással láthat egy példát, amelyben adat érkezik a tárgyak internetére csatlakoztatott eszközről (kulcskód és zárkód), és eredményt ad vissza (egy vagy nulla, attól függően, hogy az eredmény igaz vagy hamis), és Az információ egy kis feldolgozása az adatbázisban való lekérdezés során kapott eredmények és az IoT csomópont által küldött eredmények összehasonlításából áll.

    Az előző példában a hexdecimális függvény segítségével decimális számot kapunk egy hexadecimális számot képviselő szövegből, amelyet az IoT-eszköz küldött. A funkció használatának további előnye, hogy – amint azt korábban kifejtettük – elkerülhető a kód hozzáadásával történő támadás SQL rosszindulatú a POST kérés adataira.

    Hozzászólás Comment

    Lehet, hogy lemaradtál