Få tilgang til databasen fra PHP-programmeringsspråket

Få tilgang til databasen fra PHP-programmeringsspråket

Få tilgang til databasen fra PHP-programmeringsspråket

Innholdsfortegnelse

    IoT webserverHTTP POST IoT Web ServerMySQL-database. IoT webserverPHP Language IoT Web Server

    I denne siste artikkelen i serien om Bruke en webserver til å lagre data fra enheter koblet til tingenes internett, forklarer hvordan du registrerer i en database MySQL informasjonen som IoT-noder sender til serveren som gjør HTTP POST-forespørsler. Lesere av denne artikkelen, av hele bloggen, er kanskje ikke spesielt kjent med programmering i PHP språk men sikkert ja med programmeringen av mikrokontrollere på språk C o C + + så, bortsett fra noen detaljer, for eksempel foran dollartegnet ($) til variablene, vil du kunne følge eksemplene uten behov for ytterligere forklaringer siden de er gjort etter en veldig nøytral programmeringsstil, ikke spesifikk for PHP.

    Lagre informasjon i databasen

    Som forklart i artikkelen om IoT-datalagring ved å sende HTTP POST-forespørsler til en webserver, på slutten av overskriftene, inneholder hoveddelen av POST-forespørselen dataene som sendes til serveren. Den vanligste måten å sende denne informasjonen til serveren på er i vanlig tekstformat fordi det er lettere å analysere det selv "manuelt". Når dataene som sendes til serveren er komplekse, vil det sikkert være praktisk å strukturere dem ved å bruke for eksempel formatet XML o JSON. Ved vanlig bruk av en webserver for å administrere informasjon fra enheter koblet til tingenes internett er det ikke vanlig å ha behov for en datastruktur, så det er normalt å sende dem i ren tekst i formatet variable=valor.

    I HTTP POST-forespørselen i følgende eksempel, blir ressursen (normalt en nettside) /iot/grabar_temperatura forespurt fra polaridad.es-serveren og tre variabler sendes: ne, tp og cr, som henholdsvis inneholder verdiene" 12", "10.26" og «2.18» Det er også viktig å huske at det er en tom linje for å skille overskriftene fra dataene.

    Det endelige målet for følgende kode PHP vil sende til databaseserveren MySQL ordren SQL:

    som en ny post vil bli opprettet med (INSERT)
    i varmedatabasen (INTO calefacciones)
    tilordne til felt (numero_estancia,temperatura,corriente)
    verdiene som tilsvarer HTTP POST-forespørselen VALUES (12, 10.26, 2.18)

    Koblingen til databasen gjøres med funksjonen mysqli_connect i henhold til formatet: mysqli_connect($servidor,$usuario,$clave,$base_datos) som returnerer en peker til tilkoblingsobjektet og som bruker variablene som definerer tilgang (som brukernavn, passord...) og som tidligere har blitt tildelt for fremtidig hypotetisk bruk i skriptet.

    For å oppdage om tilkoblingen har vært vellykket, brukes funksjonen mysqli_connect_errno() som returnerer feilnummeret som kan ha oppstått eller null (false) hvis tilkoblingen ble opprettet riktig. For å varsle feil, blir applikasjonen som gjør HTTP-forespørselen svart med verdien null, i dette tilfellet programmet som kjøres i µC av IoT-noden.

    Før du legger til tekst som er lagret i $consulta_sql som ordren er sammensatt med SQL som sendes til databaseserveren, informasjonen som har ankommet i POST-forespørselsvariablene er forhåndsbehandlet, som et minimum, for å unngå et angrep av SQL-injeksjon. I forrige eksempel er konverteringen til den tilsvarende datatypen tvunget (int) (heltall) eller (float) (flytende komma desimal) som ville være nok til å eliminere mulig ondsinnet kode lagt til forespørselsdataene av servidor web.

    Som kan sees, i PHP språk Periodesymbolet (.) brukes til å sette sammen tekstene som utgjør rekkefølgen SQL eller punktum og likhetstegn-operatoren (.=) for å legge til tekst til høyre for den som allerede lagrer en variabel, og det enkle anførselstegn (‘) brukes også til å omslutte tekstkonstanter, ikke bare tegn. Selv om det i dette tilfellet også kan brukes doble anførselstegn («), i PHP språk brukes til å behandle innholdet, for eksempel, inkludert variabler i teksten i formatet $texto="Me llamo $nombre"; som et alternativ til formatet $texto='Me llamo '.$nombre; lar deg også inkludere sitater av en type i en annen uten å måtte bruke rømningstegn når dobler veksler innen singler eller singler innen doubler som i oppgaven $texto='esto no hay que "escaparlo" en PHP';.

    For å utføre spørringen til serveren MySQL funksjonen brukes mysqli_query med formatet mysqli_query($conexion,$consulta_sql) som tar som parametere objektforbindelsen til databasen og teksten med rekkefølgen SQL som er komponert.

    Funksjonen mysqli_query($conexion,$consulta_sql) returnerer et markørobjekt som kan brukes til å krysse de returnerte dataene hvis det er aktuelt eller, som i eksemplet ovenfor, for å få informasjon om operasjonen, spesielt for å kjenne indeksen som er tilordnet den nye posten som operasjonen har opprettet i tabellen " varmeovner" med funksjonen mysqli_insert_id($conexion)

    Verdien returnert av mysqli_query($conexion,$consulta_sql) kan evalueres til falsk i en boolsk operasjon for å fastslå at det har oppstått en feil. I det forrige eksemplet brukes den til å returnere, som i tilfellet med tilkoblingsfeilen, en null til applikasjonen som gjør POST-forespørselen. På denne måten vil programmet returnere et tall større enn null som representerer indeksen til den nye posten hvis operasjonen er korrekt eller en null hvis operasjonen gir en feil.

    For å frigjøre ressursene som er tildelt databaseforbindelsen, "lukkes" den ved hjelp av funksjonen mysqli_close($conexion)

    Les informasjon fra databasen

    Bortsett fra i arkitekturer for tåkeberegning De fleste IoT-noder begrenser seg til å sende informasjonen som fanges opp av sensorene deres til serveren, det vil si servidor web Den kommuniserer kun med dem for å lagre informasjonen, så med forrige eksempel er en god del av sakene som vil oppstå i denne søknaden allerede løst. Det neste trinnet kan være å lage et nettsted som viser dataene overvåket av enheter koblet til tingenes internett, et verk av frontend som er utenfor det som diskuteres i denne serien med opplæringsprogrammer.

    Det som kan skje er at en IoT-node har en viss interaktivitet og oppfører seg annerledes basert på historiske data eller forutser muligheten for å endre oppførselen i henhold til en konfigurasjon som kommer til den fra en server eller til og med noden er en skjerm som viser en graf med data som nylig har blitt overvåket sammenlignet med data som ble innhentet på tidligere datoer. For alle disse situasjonene er det også interessant å kunne lese data fra serveren MySQL gjennom servidor web som illustrert i følgende eksempel som simulerer å få en liste over datoene for alarmtilstandene bestemt av øyeblikkene da temperaturen oversteg 40°C

    I eksemplet ovenfor brukes kommandoen for å spørre databasen SQL SELECT i henhold til grunnformatet SELECT campos FROM tabla WHERE condición ORDER BY campo DESC med det eneste særegne ved å legge til funksjonene i datofeltet DAY, MONTH, YEAR y TIME for å få frem dag, månedsnummer, år og klokkeslett hver for seg. Betingelsen som stilles er at temperaturen er høyere enn 40.0 og bestilles ved hjelp av datofeltet fra høyeste (mest gjeldende) til laveste (eldste) som indikerer det med klausulen DESC

    Å gå gjennom verdiene som returneres av spørringen fra en løkke for med kjent dimensjon brukes funksjonen mysqli_num_rows($resultado) som angir antall poster som er funnet. Med funksjonen mysqli_data_seek($resultado,$numero_resultado) resultatmarkøren kan flyttes til en bestemt posisjon uttrykt av looptelleren for, $numero_resultado, i eksemplet.

    For å lagre feltene til posten som resultatmarkøren peker på i en vektor, brukes funksjonen mysqli_fetch_row($resultado) som er tilordnet variabelen $registro som senere vil bli brukt til å danne en frase med de forskjellige verdiene, og få tilgang til dem ved hjelp av deres indekser.

    Når alle verdiene har blitt krysset, frigjøres ressursene som er tilordnet søkeresultatet SQL med funksjon mysqli_free_result($resultado)

    Behandle informasjon fra databasen. Sammenlign verdier.

    Noen ganger er det praktisk at informasjonsbehandlingen sentraliseres på serveren selv om det var mulig å gjøre det i IoT-nodene i stilen tåkeberegning. I følgende eksempel er årsakene som simuleres for å gjøre det sikkerhet; Noden har informasjon om sin nøkkel (lås) og om en forespørsel (nøkkel), men vet ikke om det er hensiktsmessig å vike for kombinasjonen av begge, så den må konsultere serveren, som er den som tar avgjørelsen og informerer noden ved å svare null (for å indikere en mislykket sammenligning) eller en (for å indikere at sammenligningen var vellykket) basert på resultatet av en spørring til databasen din.

    Med denne unnskyldningen kan du se et eksempel der data mottas fra enheten koblet til tingenes internett (en nøkkelkode og en låskode), et resultat returneres (ett eller null avhengig av at resultatet er sant eller usant) og det gjennomføres en liten bearbeiding av informasjonen som består av å sammenligne resultatene som er oppnådd ved konsultasjon av databasen med de som sendes av IoT-noden.

    I forrige eksempel brukes hexdec-funksjonen til å hente et desimaltall fra en tekst som representerer et heksadesimalt tall og er det som sendes av IoT-enheten. Den ekstra fordelen med å bruke denne funksjonen er å unngå, som forklart før, et angrep ved å legge til kode SQL ondsinnet til dataene i POST-forespørselen.

    Legg inn kommentar

    Du kan ha gått glipp av