Greifen Sie über die Programmiersprache PHP auf die Datenbank zu

Greifen Sie über die Programmiersprache PHP auf die Datenbank zu

Greifen Sie über die Programmiersprache PHP auf die Datenbank zu

Inhaltsverzeichnis

    IoT-WebserverHTTP POST IoT-WebserverMySQL-Datenbank. IoT-WebserverIoT-Webserver in PHP-Sprache

    In diesem letzten Artikel der Serie zum Thema Verwendung eines Webservers zum Speichern von Daten von Geräten, die mit dem Internet der Dinge verbunden sind, erklärt, wie man in einer Datenbank aufzeichnet MySQL die Informationen, die IoT-Knoten über HTTP-POST-Anfragen an den Server senden. Leser dieses Artikels und des gesamten Blogs sind möglicherweise nicht besonders vertraut mit der Programmierung im PHP-Sprache aber sicherlich ja mit der Programmierung von Mikrocontroller in Sprachen C o C + + Abgesehen von einigen Details, wie z. B. dem Voranstellen des Dollarzeichens ($) vor den Variablen, können Sie den Beispielen ohne weitere Erklärungen folgen, da sie nach einem sehr neutralen Programmierstil erstellt wurden, der nicht spezifisch ist PHP.

    Speichern Sie Informationen in der Datenbank

    Wie im Artikel zum erklärt IoT-Datenspeicherung durch HTTP-POST-Anfragen an einen Webserver, am Ende der Header enthält der Hauptteil der POST-Anfrage die Daten, die an den Server gesendet werden. Diese Informationen werden am häufigsten im Klartextformat an den Server gesendet, da sie selbst „manuell“ einfacher zu analysieren sind. Wenn die an den Server gesendeten Daten komplex sind, ist es sicherlich praktisch, sie beispielsweise anhand des Formats zu strukturieren XML o JSON. Bei der üblichen Verwendung eines Webservers zur Verwaltung von Informationen von Geräten, die mit dem Internet der Dinge verbunden sind, ist es nicht üblich, eine Datenstruktur zu benötigen, daher ist es normal, sie im Klartextformat zu senden variable=valor.

    In der HTTP-POST-Anfrage des folgenden Beispiels wird die Ressource (normalerweise eine Webseite) /iot/grabar_temperatura vom polaridad.es-Server angefordert und drei Variablen gesendet: ne, tp und cr, die jeweils die Werte „ 12“, „10.26“ und „2.18“ Es ist auch wichtig zu beachten, dass es eine Leerzeile gibt, um die Kopfzeilen von den Daten zu trennen.

    Das Endziel des folgenden Codes PHP wird an den Datenbankserver gesendet MySQL die Bestellung SQL:

    Womit ein neuer Datensatz erstellt wird (INSERT)
    in der Heizungsdatenbank (INTO calefacciones)
    Zuordnung zu Feldern (numero_estancia,temperatura,corriente)
    die Werte, die der HTTP-POST-Anfrage entsprechen VALUES (12, 10.26, 2.18)

    Die Verbindung zur Datenbank erfolgt über die Funktion mysqli_connect je nach Format: mysqli_connect($servidor,$usuario,$clave,$base_datos) das einen Zeiger auf das Verbindungsobjekt zurückgibt und die Variablen verwendet, die den Zugriff definieren (z. B. Benutzer, Passwort ...) und die zuvor für zukünftige hypothetische Verwendungen im Skript zugewiesen wurden.

    Um zu erkennen, ob die Verbindung erfolgreich war, wird die Funktion verwendet mysqli_connect_errno() Gibt die Fehlernummer zurück, die möglicherweise aufgetreten ist, oder Null (falsch), wenn die Verbindung korrekt hergestellt wurde. Um Fehler zu benachrichtigen, wird der Anwendung, die die HTTP-Anfrage stellt, mit dem Wert Null geantwortet, in diesem Fall dem Programm, das in ausgeführt wird µC des IoT-Knotens.

    Vor dem Hinzufügen zu Text, der in gespeichert ist $consulta_sql mit der die Bestellung zusammengestellt wird SQL Die an den Datenbankserver gesendeten Informationen werden in den POST-Anforderungsvariablen mindestens vorverarbeitet, um einen Angriff durch zu verhindern SQL-Injektion. Im vorherigen Beispiel wird die Konvertierung in den entsprechenden Datentyp erzwungen (int) (Ganzzahl) oder (float) (Gleitkomma-Dezimalzahl), was ausreichen würde, um möglichen Schadcode zu eliminieren, der den Anforderungsdaten hinzugefügt wurde Webserver.

    Wie zu sehen ist, in der PHP-Sprache Das Punktsymbol (.) dient zur Verkettung der Texte, aus denen die Bestellung besteht SQL oder der Punkt- und Gleichheitszeichenoperator (.=), um Text rechts von dem hinzuzufügen, der bereits eine Variable speichert, und das einfache Anführungszeichen (‘) wird auch zum Einschließen von Textkonstanten und nicht nur von Zeichen verwendet. Obwohl in diesem Fall auch doppelte Anführungszeichen («) verwendet werden können, in PHP-Sprache dienen der Verarbeitung des Inhalts, beispielsweise der Einbindung von Variablen innerhalb des Textes in das Format $texto="Me llamo $nombre"; als Alternative zum Format $texto='Me llamo '.$nombre; Außerdem können Sie Anführungszeichen eines Typs in einen anderen einfügen, ohne Escapezeichen verwenden zu müssen, wenn sich Doppelzeichen innerhalb von Einzelzeichen oder Einzelzeichen innerhalb von Doppelzeichen abwechseln, wie in der Aufgabe $texto='esto no hay que "escaparlo" en PHP';.

    Um die Abfrage an den Server auszuführen MySQL Funktion verwendet wird mysqli_query mit dem Format mysqli_query($conexion,$consulta_sql) welches als Parameter die Objektverbindung zur Datenbank und den Text mit der Bestellung übernimmt SQL das wurde komponiert.

    Die Funktion mysqli_query($conexion,$consulta_sql) gibt ein Cursor-Objekt zurück, das gegebenenfalls zum Durchlaufen der zurückgegebenen Daten oder, wie im obigen Beispiel, zum Abrufen von Informationen über die Operation verwendet werden kann, insbesondere um den Index zu kennen, der dem neuen Datensatz zugewiesen ist, den die Operation in der Tabelle erstellt hat. Heizungen“ mit der Funktion mysqli_insert_id($conexion)

    Der von zurückgegebene Wert mysqli_query($conexion,$consulta_sql) kann in einer booleschen Operation als falsch ausgewertet werden, um festzustellen, dass ein Fehler aufgetreten ist. Im vorherigen Beispiel wird es verwendet, um, wie im Fall des Verbindungsfehlers, eine Null an die Anwendung zurückzugeben, die die POST-Anfrage stellt. Auf diese Weise gibt das Programm eine Zahl größer als Null zurück, die den Index des neuen Datensatzes darstellt, wenn die Operation korrekt ist, oder eine Null, wenn die Operation einen Fehler erzeugt.

    Um die der Datenbankverbindung zugewiesenen Ressourcen freizugeben, wird diese über die Funktion „geschlossen“. mysqli_close($conexion)

    Informationen aus der Datenbank lesen

    Außer in Architekturen für Nebel-Computing Die meisten IoT-Knoten beschränken sich darauf, die von ihren Sensoren erfassten Informationen an den Server zu senden, d Webserver Es kommuniziert nur mit ihnen, um die Informationen zu speichern, sodass mit dem vorherigen Beispiel ein Großteil der Fälle, die in dieser Anwendung auftreten werden, bereits gelöst wurde. Der nächste Schritt könnte darin bestehen, eine Website zu erstellen, die die Daten zeigt, die von Geräten überwacht werden, die mit dem Internet der Dinge verbunden sind, eine Arbeit von Frontend Dies liegt außerhalb des Inhalts dieser Tutorialreihe.

    Was passieren kann, ist, dass ein IoT-Knoten über eine gewisse Interaktivität verfügt und sich basierend auf historischen Daten unterschiedlich verhält oder die Möglichkeit vorsieht, sein Verhalten entsprechend einer Konfiguration zu ändern, die ihm von einem Server übermittelt wird, oder dass der Knoten sogar ein Bildschirm ist, der ein Diagramm anzeigt mit den kürzlich überwachten Daten im Vergleich zu den zu früheren Zeitpunkten erfassten Daten. Für all diese Situationen ist es auch interessant, Daten vom Server auslesen zu können MySQL durch Webserver wie im folgenden Beispiel dargestellt, das simuliert, eine Liste der Daten der Alarmzustände zu erhalten, die durch die Zeitpunkte bestimmt werden, in denen die Temperatur 40 °C überstieg

    Im obigen Beispiel wird der Befehl zum Abfragen der Datenbank verwendet SQL SELECT entsprechend dem Grundformat SELECT campos FROM tabla WHERE condición ORDER BY campo DESC mit der einzigen Besonderheit, dass die Funktionen zum Datumsfeld hinzugefügt werden DAY, MONTH, YEAR y TIME um den Tag, die Zahl des Monats, das Jahr und die Uhrzeit getrennt zu erhalten. Die auferlegte Bedingung besteht darin, dass die Temperatur über 40.0 liegt und anhand des Datumsfelds vom höchsten (aktuellsten) zum niedrigsten (ältesten) sortiert wird, wobei dies mit der Klausel angegeben wird DESC

    Um die von der Abfrage zurückgegebenen Werte aus einer Schleife zu durchlaufen for Bei bekannter Dimension wird die Funktion verwendet mysqli_num_rows($resultado) Dies gibt die Anzahl der gefundenen Datensätze an. Mit der Funktion mysqli_data_seek($resultado,$numero_resultado) Der Ergebniscursor kann an eine bestimmte Position bewegt werden, die durch den Schleifenzähler ausgedrückt wird for, $numero_resultado, im Beispiel.

    Um die Felder des Datensatzes, auf den der Ergebniscursor zeigt, in einem Vektor zu speichern, wird die Funktion verwendet mysqli_fetch_row($resultado) welches der Variablen zugeordnet ist $registro die später verwendet werden, um eine Phrase mit den verschiedenen Werten zu bilden und über ihre Indizes auf sie zuzugreifen.

    Sobald alle Werte durchlaufen wurden, werden die dem Abfrageergebnis zugewiesenen Ressourcen freigegeben SQL mit Funktion mysqli_free_result($resultado)

    Verarbeiten Sie Informationen aus der Datenbank. Werte vergleichen.

    In manchen Fällen ist es praktisch, die Informationsverarbeitung auf dem Server zu zentralisieren, selbst wenn dies in den IoT-Knoten in diesem Stil möglich wäre Nebel-Computing. Im folgenden Beispiel werden folgende Gründe simuliert: Sicherheit; Der Knoten verfügt über Informationen über seinen Schlüssel (Schloss) und über eine Anfrage (Schlüssel), weiß jedoch nicht, ob es angemessen ist, der Kombination beider nachzugeben, daher muss er den Server konsultieren, der die Entscheidung trifft und informiert den Knoten, indem er basierend auf dem Ergebnis einer Abfrage an Ihre Datenbank mit null (um einen fehlgeschlagenen Vergleich anzuzeigen) oder eins (um anzuzeigen, dass der Vergleich erfolgreich war) antwortet.

    Mit dieser Ausrede können Sie ein Beispiel sehen, in dem Daten von dem mit dem Internet der Dinge verbundenen Gerät empfangen werden (ein Schlüsselcode und ein Sperrcode), ein Ergebnis zurückgegeben wird (eins oder null, je nachdem, ob das Ergebnis wahr oder falsch ist) und Es erfolgt eine kleine Verarbeitung der Informationen, die aus dem Vergleich der bei der Abfrage der Datenbank erhaltenen Ergebnisse mit den vom IoT-Knoten gesendeten Ergebnissen besteht.

    Im vorherigen Beispiel wird die Hexdec-Funktion verwendet, um eine Dezimalzahl aus einem Text zu erhalten, der eine Hexadezimalzahl darstellt und vom IoT-Gerät gesendet wird. Der zusätzliche Vorteil dieser Funktion besteht darin, wie bereits erläutert, einen Angriff durch das Hinzufügen von Code zu verhindern SQL schädlich für die Daten der POST-Anfrage.

    Geben Sie Anmerkung

    Sie können vermisst haben