Πρόσβαση στη βάση δεδομένων από τη γλώσσα προγραμματισμού PHP

Πρόσβαση στη βάση δεδομένων από τη γλώσσα προγραμματισμού PHP

Πρόσβαση στη βάση δεδομένων από τη γλώσσα προγραμματισμού PHP

Πίνακας Περιεχομένων

    Διακομιστής Ιστού IoTΔιακομιστής Ιστού HTTP POST IoTΒάση δεδομένων MySQL. Διακομιστής Ιστού IoTΔιακομιστής Ιστού IoT Γλώσσας PHP

    Σε αυτό το τελευταίο άρθρο της σειράς για το Χρήση διακομιστή web για αποθήκευση δεδομένων από συσκευές συνδεδεμένες στο Διαδίκτυο των πραγμάτων, εξηγεί τον τρόπο εγγραφής σε μια βάση δεδομένων MySQL τις πληροφορίες που στέλνουν οι κόμβοι IoT στον διακομιστή κάνοντας αιτήματα HTTP POST. Οι αναγνώστες αυτού του άρθρου, ολόκληρου του ιστολογίου, μπορεί να μην είναι ιδιαίτερα εξοικειωμένοι με τον προγραμματισμό στο Γλώσσα PHP αλλά σίγουρα ναι με τον προγραμματισμό του μικροελεγκτές σε γλώσσες C o C + + Έτσι, εκτός από ορισμένες λεπτομέρειες, όπως πριν από το σύμβολο του δολαρίου ($) στις μεταβλητές, θα μπορείτε να ακολουθήσετε τα παραδείγματα χωρίς να χρειάζονται περαιτέρω επεξηγήσεις, καθώς έχουν γίνει σύμφωνα με ένα πολύ ουδέτερο στυλ προγραμματισμού, όχι ειδικά για PHP.

    Αποθηκεύστε πληροφορίες στη βάση δεδομένων

    Όπως εξηγείται στο άρθρο σχετικά με το Αποθήκευση δεδομένων IoT κάνοντας αιτήματα HTTP POST σε διακομιστή ιστού, στο τέλος των κεφαλίδων, το σώμα της αίτησης POST περιέχει τα δεδομένα που αποστέλλονται στον διακομιστή. Ο πιο συνηθισμένος τρόπος αποστολής αυτών των πληροφοριών στον διακομιστή είναι σε μορφή απλού κειμένου, επειδή είναι ευκολότερο να αναλυθούν ακόμη και "με το χέρι". Όταν τα δεδομένα που αποστέλλονται στον διακομιστή είναι πολύπλοκα, θα είναι σίγουρα βολικό να τα δομήσετε χρησιμοποιώντας, για παράδειγμα, τη μορφή XML o JSON. Στη συνήθη χρήση ενός διακομιστή ιστού για τη διαχείριση πληροφοριών από συσκευές που είναι συνδεδεμένες στο Διαδίκτυο των πραγμάτων, δεν είναι συνηθισμένο να χρειάζεται μια δομή δεδομένων, επομένως είναι φυσιολογικό να αποστέλλονται σε απλό κείμενο σε μορφή variable=valor.

    Στο αίτημα HTTP POST του παρακάτω παραδείγματος, ο πόρος (συνήθως μια ιστοσελίδα) /iot/grabar_temperatura ζητείται από τον διακομιστή polaridad.es και αποστέλλονται τρεις μεταβλητές: ne, tp και cr, οι οποίες περιέχουν αντίστοιχα τις τιμές " 12», «10.26» και «2.18» Είναι επίσης σημαντικό να θυμάστε ότι υπάρχει μια κενή γραμμή για να διαχωρίσετε τις κεφαλίδες από τα δεδομένα.

    Ο τελικός στόχος του παρακάτω κώδικα PHP θα σταλεί στον διακομιστή βάσης δεδομένων MySQL η παραγγελία SQL:

    Με το οποίο θα δημιουργηθεί νέος δίσκος (INSERT)
    στη βάση δεδομένων θέρμανσης (INTO calefacciones)
    αντιστοίχιση σε πεδία (numero_estancia,temperatura,corriente)
    τις τιμές που αντιστοιχούν στο αίτημα HTTP POST VALUES (12, 10.26, 2.18)

    Η σύνδεση με τη βάση δεδομένων γίνεται με τη συνάρτηση mysqli_connect σύμφωνα με τη μορφή: mysqli_connect($servidor,$usuario,$clave,$base_datos) που επιστρέφει έναν δείκτη στο αντικείμενο σύνδεσης και που χρησιμοποιεί τις μεταβλητές που ορίζουν την πρόσβαση (όπως όνομα χρήστη, κωδικός πρόσβασης...) και που έχουν εκχωρηθεί προηγουμένως για μελλοντικές υποθετικές χρήσεις στο σενάριο.

    Για να εντοπίσετε εάν η σύνδεση ήταν επιτυχής, χρησιμοποιείται η συνάρτηση mysqli_connect_errno() που επιστρέφει τον αριθμό σφάλματος που μπορεί να έχει προκύψει ή μηδέν (false) εάν η σύνδεση πραγματοποιήθηκε σωστά. Για την κοινοποίηση σφαλμάτων, η εφαρμογή που κάνει το αίτημα HTTP ανταποκρίνεται με τιμή μηδέν, σε αυτήν την περίπτωση το πρόγραμμα που εκτελείται στο μC του κόμβου IoT.

    Πριν προσθέσετε σε κείμενο που είναι αποθηκευμένο σε $consulta_sql με την οποία συντάσσεται η παραγγελία SQL που αποστέλλεται στον διακομιστή της βάσης δεδομένων, οι πληροφορίες που έχουν φτάσει στις μεταβλητές αιτήματος POST υποβάλλονται σε προεπεξεργασία, τουλάχιστον, για την αποφυγή επίθεσης από SQL injection. Στο προηγούμενο παράδειγμα, η μετατροπή στον αντίστοιχο τύπο δεδομένων είναι υποχρεωτική (int) (ακέραιος) ή (float) (δεκαδική υποδιαστολή) που θα ήταν αρκετό για την εξάλειψη πιθανού κακόβουλου κώδικα που προστέθηκε στα δεδομένα αιτήματος από web εξυπηρετητή.

    Όπως φαίνεται, στο Γλώσσα PHP Το σύμβολο τελείας (.) χρησιμοποιείται για τη συνένωση των κειμένων που σχηματίζουν τη σειρά SQL ή τον τελεστή τελείας και ίσου (.=) για να προσθέσετε κείμενο στα δεξιά αυτού που ήδη αποθηκεύει μια μεταβλητή και το απλό εισαγωγικό (‘) χρησιμοποιείται επίσης για να περικλείει σταθερές κειμένου, όχι μόνο χαρακτήρες. Αν και σε αυτήν την περίπτωση μπορούν να χρησιμοποιηθούν και διπλά εισαγωγικά («), στο Γλώσσα PHP χρησιμοποιούνται για την επεξεργασία του περιεχομένου, για παράδειγμα, συμπεριλαμβανομένων μεταβλητών εντός του κειμένου στη μορφή $texto="Me llamo $nombre"; ως εναλλακτική στη μορφή $texto='Me llamo '.$nombre; επιτρέποντάς σας επίσης να συμπεριλάβετε εισαγωγικά ενός τύπου σε έναν άλλο χωρίς να χρειάζεται να χρησιμοποιείτε πινακίδες διαφυγής όποτε τα διπλά εναλλάσσονται σε μονά ή μονά σε διπλά όπως στην ανάθεση $texto='esto no hay que "escaparlo" en PHP';.

    Για να εκτελέσετε το ερώτημα στον διακομιστή MySQL χρησιμοποιείται η λειτουργία mysqli_query με τη μορφή mysqli_query($conexion,$consulta_sql) που παίρνει ως παραμέτρους το αντικείμενο-σύνδεση με τη βάση δεδομένων και το κείμενο με την παραγγελία SQL που έχει συνταχθεί.

    Η λειτουργία mysqli_query($conexion,$consulta_sql) επιστρέφει έναν δρομέα-αντικείμενο που μπορεί να χρησιμοποιηθεί για τη διέλευση των επιστρεφόμενων δεδομένων εάν ισχύει ή, όπως στο παραπάνω παράδειγμα, για τη λήψη πληροφοριών σχετικά με τη λειτουργία, συγκεκριμένα για τη γνώση του ευρετηρίου που έχει εκχωρηθεί στη νέα εγγραφή που έχει δημιουργήσει η λειτουργία στον πίνακα " θερμαντήρες» με τη λειτουργία mysqli_insert_id($conexion)

    Η τιμή που επιστράφηκε από mysqli_query($conexion,$consulta_sql) μπορεί να αξιολογήσει ως false σε μια λειτουργία boolean για να προσδιορίσει ότι έχει προκύψει σφάλμα. Στο προηγούμενο παράδειγμα χρησιμοποιείται για να επιστρέψει, όπως στην περίπτωση του σφάλματος σύνδεσης, ένα μηδέν στην εφαρμογή που κάνει το αίτημα POST. Με αυτόν τον τρόπο, το πρόγραμμα θα επιστρέψει έναν αριθμό μεγαλύτερο από το μηδέν που αντιπροσωπεύει το δείκτη της νέας εγγραφής εάν η λειτουργία είναι σωστή ή ένα μηδέν εάν η λειτουργία παράγει σφάλμα.

    Για να ελευθερωθούν οι πόροι που έχουν εκχωρηθεί στη σύνδεση της βάσης δεδομένων, αυτή "κλείνεται" χρησιμοποιώντας τη συνάρτηση mysqli_close($conexion)

    Διαβάστε πληροφορίες από τη βάση δεδομένων

    Εκτός από τις αρχιτεκτονικές για υπολογισμός ομίχλης Οι περισσότεροι κόμβοι IoT περιορίζονται στην αποστολή των πληροφοριών που συλλαμβάνονται από τους αισθητήρες τους στον διακομιστή, δηλαδή web εξυπηρετητή Επικοινωνεί μαζί τους μόνο για την αποθήκευση των πληροφοριών, επομένως με το προηγούμενο παράδειγμα ένα μεγάλο μέρος των περιπτώσεων που θα προκύψουν σε αυτήν την εφαρμογή έχουν ήδη επιλυθεί. Το επόμενο βήμα θα μπορούσε να είναι η δημιουργία ενός ιστότοπου που θα εμφανίζει τα δεδομένα που παρακολουθούνται από συσκευές που είναι συνδεδεμένες στο Διαδίκτυο των πραγμάτων. frontend που είναι έξω από αυτό που συζητείται σε αυτή τη σειρά σεμιναρίων.

    Αυτό που μπορεί να συμβεί είναι ότι ένας κόμβος IoT έχει μια συγκεκριμένη αλληλεπίδραση και συμπεριφέρεται διαφορετικά βάσει ιστορικών δεδομένων ή προβλέπει τη δυνατότητα αλλαγής της συμπεριφοράς του σύμφωνα με μια διαμόρφωση που έρχεται σε αυτόν από έναν διακομιστή ή ακόμα και ο κόμβος είναι μια οθόνη που δείχνει ένα γράφημα με τα δεδομένα που παρακολουθήθηκαν πρόσφατα σε σύγκριση με αυτά που αποκτήθηκαν σε προηγούμενες ημερομηνίες. Για όλες αυτές τις περιπτώσεις είναι επίσης ενδιαφέρον να μπορείτε να διαβάσετε δεδομένα από τον διακομιστή MySQL μέσω του web εξυπηρετητή όπως φαίνεται στο ακόλουθο παράδειγμα που προσομοιώνει τη λήψη μιας λίστας με τις ημερομηνίες των καταστάσεων συναγερμού που καθορίζονται από τις στιγμές κατά τις οποίες η θερμοκρασία ξεπέρασε τους 40°C

    Στο παραπάνω παράδειγμα, για να κάνετε ερώτημα στη βάση δεδομένων χρησιμοποιείται η εντολή SQL SELECT σύμφωνα με τη βασική μορφή SELECT campos FROM tabla WHERE condición ORDER BY campo DESC με μόνη ιδιαιτερότητα την προσθήκη των συναρτήσεων στο πεδίο ημερομηνίας DAY, MONTH, YEAR y TIME προκειμένου να λάβετε ξεχωριστά την ημέρα, τον αριθμό του μήνα, το έτος και την ώρα. Η προϋπόθεση που επιβάλλεται είναι ότι η θερμοκρασία είναι μεγαλύτερη από 40.0 και ταξινομείται χρησιμοποιώντας το πεδίο ημερομηνίας από το υψηλότερο (πιο τρέχον) στο χαμηλότερο (παλαιότερο) υποδεικνύοντάς το με την ρήτρα DESC

    Για να κάνετε βρόχο μέσω των τιμών που επιστρέφονται από το ερώτημα από έναν βρόχο for με γνωστή διάσταση χρησιμοποιείται η συνάρτηση mysqli_num_rows($resultado) που δείχνει τον αριθμό των εγγραφών που έχουν βρεθεί. Με τη λειτουργία mysqli_data_seek($resultado,$numero_resultado) ο κέρσορας των αποτελεσμάτων μπορεί να μετακινηθεί σε μια συγκεκριμένη θέση που εκφράζεται από τον μετρητή βρόχου for, $numero_resultado, στο παράδειγμα.

    Για να αποθηκεύσετε σε ένα διάνυσμα τα πεδία της εγγραφής στα οποία δείχνει ο δρομέας του αποτελέσματος, χρησιμοποιείται η συνάρτηση mysqli_fetch_row($resultado) που αποδίδεται στη μεταβλητή $registro τα οποία αργότερα θα χρησιμοποιηθούν για να σχηματίσουν μια φράση με τις διαφορετικές τιμές, προσεγγίζοντας σε αυτές από τα ευρετήριά τους.

    Αφού διασχιστούν όλες οι τιμές, οι πόροι που έχουν εκχωρηθεί στο αποτέλεσμα του ερωτήματος απελευθερώνονται SQL με λειτουργία mysqli_free_result($resultado)

    Επεξεργαστείτε πληροφορίες από τη βάση δεδομένων. Συγκρίνετε τιμές.

    Σε ορισμένες περιπτώσεις είναι βολικό για την επεξεργασία πληροφοριών να συγκεντρώνεται στον διακομιστή, ακόμα κι αν ήταν δυνατό να γίνει στους κόμβους IoT στο στυλ υπολογισμός ομίχλης. Στο παρακάτω παράδειγμα, οι λόγοι που προσομοιώνονται για κάτι τέτοιο είναι η ασφάλεια. Ο κόμβος έχει πληροφορίες για το κλειδί του (κλείδωμα) και για ένα αίτημα (κλειδί), αλλά δεν γνωρίζει αν είναι κατάλληλο να δώσει τη θέση του στον συνδυασμό και των δύο, επομένως πρέπει να συμβουλευτεί τον διακομιστή, ο οποίος είναι αυτός που παίρνει την απόφαση και ενημερώνει τον κόμβο απαντώντας μηδέν (για να υποδείξει μια αποτυχημένη σύγκριση) ή ένα (για να υποδείξει ότι η σύγκριση ήταν επιτυχής) με βάση το αποτέλεσμα ενός ερωτήματος στη βάση δεδομένων σας.

    Με αυτή τη δικαιολογία μπορείτε να δείτε ένα παράδειγμα στο οποίο λαμβάνονται δεδομένα από τη συσκευή που είναι συνδεδεμένη στο Internet of Things (ένας κωδικός κλειδιού και ένας κωδικός κλειδώματος), επιστρέφεται ένα αποτέλεσμα (ένα ή μηδέν ανάλογα με το αποτέλεσμα είναι true ή false) και πραγματοποιείται μια μικρή επεξεργασία των πληροφοριών που συνίσταται στη σύγκριση των αποτελεσμάτων που λαμβάνονται κατά τη συμβουλή της βάσης δεδομένων με εκείνα που αποστέλλονται από τον κόμβο IoT.

    Στο προηγούμενο παράδειγμα, η συνάρτηση hexdec χρησιμοποιείται για τη λήψη δεκαδικού αριθμού από ένα κείμενο που αντιπροσωπεύει έναν δεκαεξαδικό αριθμό και είναι αυτός που αποστέλλεται από τη συσκευή IoT. Το πρόσθετο πλεονέκτημα της χρήσης αυτής της λειτουργίας είναι η αποφυγή, όπως εξηγήθηκε προηγουμένως, μιας επίθεσης με την προσθήκη κώδικα SQL κακόβουλο για τα δεδομένα του αιτήματος POST.

    Δημοσίευση σχολίου

    Μπορεί να έχετε χάσει