I-access ang database mula sa PHP programming language

I-access ang database mula sa PHP programming language

I-access ang database mula sa PHP programming language

Talaan ng Nilalaman

    IoT web serverHTTP POST IoT Web ServerMySQL Database. IoT web serverPHP Language IoT Web Server

    Sa huling artikulong ito sa serye sa Paggamit ng web server upang mag-imbak ng data mula sa mga device na nakakonekta sa Internet of Things, nagpapaliwanag kung paano mag-record sa isang database MySQL ang impormasyong ipinapadala ng mga IoT node sa server na gumagawa ng mga kahilingan sa HTTP POST. Ang mga mambabasa ng artikulong ito, ng buong blog, ay maaaring hindi partikular na pamilyar sa programming sa wika ng PHP ngunit tiyak na oo sa programming ng mga microcontroller sa mga wika C o C + + kaya, maliban sa ilang mga detalye, tulad ng nauuna sa dollar sign ($) sa mga variable, magagawa mong sundin ang mga halimbawa nang hindi nangangailangan ng karagdagang mga paliwanag dahil ginawa ang mga ito sa pagsunod sa isang napaka-neutral na istilo ng programming, hindi partikular sa PHP.

    Mag-imbak ng impormasyon sa database

    Gaya ng ipinaliwanag sa artikulo sa Imbakan ng data ng IoT sa pamamagitan ng paggawa ng mga kahilingan sa HTTP POST sa isang web server, sa dulo ng mga header, ang katawan ng kahilingan ng POST ay naglalaman ng data na ipinadala sa server. Ang pinakakaraniwang paraan upang ipadala ang impormasyong ito sa server ay nasa plain text na format dahil mas madaling suriin ito kahit na "manual." Kapag kumplikado ang data na ipinadala sa server, tiyak na magiging maginhawa ang istraktura nito gamit, halimbawa, ang format XML o JSON. Sa karaniwang paggamit ng isang web server upang pamahalaan ang impormasyon mula sa mga device na nakakonekta sa Internet of Things, hindi karaniwan ang nangangailangan ng istraktura ng data, kaya normal na ipadala ang mga ito sa plain text sa format. variable=valor.

    Sa HTTP POST na kahilingan ng sumusunod na halimbawa, ang mapagkukunan (karaniwang isang web page) /iot/grabar_temperatura ay hinihiling mula sa polaridad.es server at tatlong variable ang ipinadala: ne, tp at cr, na ayon sa pagkakabanggit ay naglalaman ng mga halaga " 12", "10.26 » at «2.18» Mahalaga ring tandaan na mayroong blangkong linya upang paghiwalayin ang mga header mula sa data.

    Ang huling layunin ng sumusunod na code PHP ipapadala sa database server MySQL ang order SQL:

    Kung saan lilikha ng bagong tala (INSERT)
    sa database ng pag-init (INTO calefacciones)
    pagtatalaga sa mga patlang (numero_estancia,temperatura,corriente)
    ang mga halaga na tumutugma sa kahilingan ng HTTP POST VALUES (12, 10.26, 2.18)

    Ang koneksyon sa database ay tapos na sa function mysqli_connect ayon sa format: mysqli_connect($servidor,$usuario,$clave,$base_datos) na nagbabalik ng pointer sa connection-object at na gumagamit ng mga variable na tumutukoy sa access (gaya ng user, password...) at na dati nang itinalaga para sa hinaharap na hypothetical na paggamit sa script.

    Upang makita kung ang koneksyon ay matagumpay, ang function ay ginagamit mysqli_connect_errno() na nagbabalik ng error number na maaaring naganap o zero (false) kung naitatag nang tama ang koneksyon. Upang ipaalam ang mga error, ang application na gumagawa ng kahilingan sa HTTP ay tinutugunan ng isang halaga na zero, sa kasong ito ang program na isinasagawa sa µC ng IoT node.

    Bago idagdag sa text na naka-store sa $consulta_sql kung saan binubuo ang pagkakasunud-sunod SQL na ipinadala sa server ng database ang impormasyon na dumating sa mga variable ng kahilingan ng POST ay na-preprocess, sa pinakamababa, upang maiwasan ang pag-atake ng SQL injection. Sa nakaraang halimbawa, pinipilit ang conversion sa kaukulang uri ng data (int) (integer) o (float) (floating point decimal) na magiging sapat upang maalis ang posibleng malisyosong code na idinagdag sa data ng kahilingan ni web server.

    Tulad ng makikita, sa wika ng PHP Ang simbolong tuldok (.) ay ginagamit upang pagdugtungin ang mga tekstong bumubuo sa ayos SQL o ang operator ng tuldok at equal sign (.=) upang magdagdag ng text sa kanan ng isa na nag-iimbak na ng variable at ang solong quote (‘) ay ginagamit din para ilakip ang mga constant ng text, hindi lang mga character. Bagama't sa kasong ito, ang dobleng panipi («) ay maaari ding gamitin, sa wika ng PHP ay ginagamit upang iproseso ang nilalaman, halimbawa, kabilang ang mga variable sa loob ng teksto sa format $texto="Me llamo $nombre"; bilang isang kahalili sa format $texto='Me llamo '.$nombre; nagbibigay-daan din sa iyo na isama ang mga quote ng isang uri sa isa pa nang hindi kinakailangang gumamit ng mga escape sign sa tuwing ang mga double ay kahalili sa loob ng mga single o single sa loob ng doubles tulad ng sa assignment $texto='esto no hay que "escaparlo" en PHP';.

    Upang isagawa ang query sa server MySQL ginagamit ang function mysqli_query kasama ang format mysqli_query($conexion,$consulta_sql) na tumatagal bilang mga parameter ang object-koneksyon sa database at ang teksto na may pagkakasunud-sunod SQL na binubuo.

    Ang pag-andar mysqli_query($conexion,$consulta_sql) nagbabalik ng isang cursor-object na maaaring magamit upang lampasan ang ibinalik na data kung naaangkop o, tulad ng sa halimbawa sa itaas, upang makakuha ng impormasyon tungkol sa operasyon, partikular na malaman ang index na itinalaga sa bagong tala na ginawa ng operasyon sa talahanayan " heater" na may function mysqli_insert_id($conexion)

    Ang halaga na ibinalik ni mysqli_query($conexion,$consulta_sql) maaaring mag-evaluate sa false sa isang boolean operation upang matukoy na may naganap na error. Sa nakaraang halimbawa ito ay ginagamit upang bumalik, tulad ng sa kaso ng error sa koneksyon, isang zero sa application na gumagawa ng POST kahilingan. Sa ganitong paraan, magbabalik ang programa ng isang numerong mas malaki sa zero na kumakatawan sa index ng bagong record kung tama ang operasyon o isang zero kung ang operasyon ay gumagawa ng error.

    Upang palayain ang mga mapagkukunan na itinalaga sa koneksyon sa database, ito ay "sarado" gamit ang function mysqli_close($conexion)

    Basahin ang impormasyon mula sa database

    Maliban sa mga arkitektura para sa fog computing Karamihan sa mga IoT node ay naglilimita sa kanilang sarili sa pagpapadala ng impormasyong nakuha ng kanilang mga sensor sa server, iyon ay, ang web server Nakikipag-ugnayan lamang ito sa kanila upang mag-imbak ng impormasyon, kaya sa nakaraang halimbawa isang magandang bahagi ng mga kaso na lalabas sa application na ito ay nalutas na. Ang susunod na hakbang ay maaaring lumikha ng isang website na nagpapakita ng data na sinusubaybayan ng mga device na konektado sa Internet of Things, isang gawa ng frontend na nasa labas ng tinatalakay sa seryeng ito ng mga tutorial.

    Ang maaaring mangyari ay ang isang IoT node ay may isang partikular na interaktibidad at naiiba ang kilos batay sa isang makasaysayang data o nahuhulaan ang posibilidad na baguhin ang pag-uugali nito ayon sa isang configuration na darating dito mula sa isang server o kahit na ang node ay isang screen na nagpapakita ng isang graph kasama ang data na kamakailang sinusubaybayan kumpara sa nakuha sa mga nakaraang petsa. Para sa lahat ng mga sitwasyong ito ay kagiliw-giliw din na makapagbasa ng data mula sa server MySQL sa pamamagitan ng web server tulad ng inilalarawan sa sumusunod na halimbawa na ginagaya ang pagkuha ng isang listahan ng mga petsa ng mga estado ng alarma na tinutukoy ng mga sandali kung saan ang temperatura ay lumampas sa 40°C

    Sa halimbawa sa itaas, upang i-query ang database ang command ay ginagamit SQL SELECT ayon sa pangunahing pormat SELECT campos FROM tabla WHERE condición ORDER BY campo DESC na may tanging kakaiba ng pagdaragdag ng mga function sa field ng petsa DAY, MONTH, YEAR y TIME upang makuha ang araw, ang bilang ng buwan, ang taon at ang oras nang hiwalay. Ang kundisyong ipinataw ay ang temperatura ay mas mataas sa 40.0 at iniutos gamit ang field ng petsa mula sa pinakamataas (pinakabago) hanggang sa pinakamababa (pinakaluma) na nagsasaad nito kasama ang sugnay. DESC

    Upang i-loop ang mga halaga na ibinalik ng query mula sa isang loop for na may kilalang dimensyon ang function ay ginagamit mysqli_num_rows($resultado) na nagpapahiwatig ng bilang ng mga talaan na natagpuan. Gamit ang function mysqli_data_seek($resultado,$numero_resultado) ang cursor ng mga resulta ay maaaring ilipat sa isang tiyak na posisyon na ipinahayag ng loop counter for, $numero_resultado, sa halimbawa.

    Upang iimbak sa isang vector ang mga patlang ng rekord na itinuro ng cursor ng resulta, ginagamit ang function mysqli_fetch_row($resultado) na itinalaga sa variable $registro na sa kalaunan ay gagamitin upang bumuo ng isang parirala na may iba't ibang mga halaga, na ina-access ang mga ito sa pamamagitan ng kanilang mga index.

    Kapag nalampasan na ang lahat ng mga halaga, ilalabas ang mga mapagkukunang itinalaga sa resulta ng query SQL may pagpapaandar mysqli_free_result($resultado)

    Iproseso ang impormasyon mula sa database. Paghambingin ang mga halaga.

    Sa ilang mga pagkakataon, maginhawa para sa pagpoproseso ng impormasyon na maging sentralisado sa server kahit na posible itong gawin sa mga IoT node sa istilo. fog computing. Sa sumusunod na halimbawa ang mga dahilan na ginagaya sa paggawa nito ay seguridad; Ang node ay may impormasyon tungkol sa susi nito (lock) at tungkol sa isang kahilingan (key) ngunit hindi alam kung angkop na magbigay daan sa kumbinasyon ng dalawa, kaya dapat itong kumunsulta sa server, na siyang gumagawa ng desisyon at nagpapaalam sa node sa pamamagitan ng pagtugon ng zero (upang ipahiwatig ang isang nabigong paghahambing) o isa (upang ipahiwatig na matagumpay ang paghahambing) batay sa resulta ng isang query sa iyong database.

    Sa ganitong dahilan, makakakita ka ng isang halimbawa kung saan natatanggap ang data mula sa device na nakakonekta sa Internet of Things (isang key code at isang lock code), isang resulta ay ibinalik (isa o zero depende sa resulta kung totoo o mali) at ang isang maliit na pagproseso ng impormasyon ay isinasagawa na binubuo ng paghahambing ng mga resulta na nakuha kapag kumunsulta sa database sa mga ipinadala ng IoT node.

    Sa nakaraang halimbawa, ang hexdec function ay ginagamit upang makakuha ng decimal na numero mula sa isang text na kumakatawan sa isang hexadecimal na numero at ang ipinadala ng IoT device. Ang karagdagang bentahe ng paggamit ng function na ito ay upang maiwasan, tulad ng ipinaliwanag dati, ang isang pag-atake sa pamamagitan ng pagdaragdag ng code SQL nakakahamak sa data ng kahilingan sa POST.

    Maaaring Na-miss Mo