Veritabanına PHP programlama dilinden erişin

Veritabanına PHP programlama dilinden erişin

Veritabanına PHP programlama dilinden erişin

İçindekiler

    IoT web sunucusuHTTP POST IoT Web SunucusuMySQL Veritabanı. IoT web sunucusuPHP Dili IoT Web Sunucusu

    Serinin bu son makalesinde Nesnelerin İnterneti'ne bağlı cihazlardan veri depolamak için bir web sunucusu kullanma, bir veritabanına nasıl kayıt yapılacağını açıklar MySQL IoT düğümlerinin HTTP POST istekleri yaparak sunucuya gönderdiği bilgiler. Bu makalenin ve tüm blogun okuyucuları, programlamaya özellikle aşina olmayabilir. PHP dili ama kesinlikle evet programlamayla mikrodenetleyiciler dillerde C o C + + dolayısıyla, değişkenlerin başına dolar işareti ($) konulması gibi bazı ayrıntılar dışında, örnekler belirli bir konuya özgü olmayan, çok tarafsız bir programlama stili izlenerek yapıldıkları için daha fazla açıklamaya ihtiyaç duymadan takip edebileceksiniz. PHP.

    Bilgileri veritabanında saklayın

    Makalede açıklandığı gibi Bir web sunucusuna HTTP POST istekleri yaparak IoT veri depolamaBaşlıkların sonunda, POST isteğinin gövdesi sunucuya gönderilen verileri içerir. Bu bilgiyi sunucuya göndermenin en yaygın yolu düz metin biçimindedir çünkü "manuel olarak" bile analiz edilmesi daha kolaydır. Sunucuya gönderilen veriler karmaşık olduğunda, örneğin şu formatı kullanarak yapılandırmak kesinlikle uygun olacaktır: XML o JSON. Nesnelerin İnterneti'ne bağlı cihazlardan gelen bilgileri yönetmek için bir web sunucusunun olağan kullanımında, bir veri yapısına ihtiyaç duyulması yaygın değildir, bu nedenle bunları düz metin biçiminde aşağıdaki formatta göndermek normaldir: variable=valor.

    Aşağıdaki örnekteki HTTP POST isteğinde, polaridad.es sunucusundan kaynak (normalde bir web sayfası) /iot/grabar_temperatura istenir ve üç değişken gönderilir: sırasıyla değerleri içeren ne, tp ve cr" 12", "10.26 » ve «2.18» Başlıkları verilerden ayırmak için boş bir satırın bulunduğunu da unutmamak önemlidir.

    Aşağıdaki kodun nihai hedefi PHP veritabanı sunucusuna gönderilecek MySQL sipariş SQL:

    Yeni bir kaydın oluşturulacağı (INSERT)
    ısıtma veritabanında (INTO calefacciones)
    alanlara atama (numero_estancia,temperatura,corriente)
    HTTP POST isteğine karşılık gelen değerler VALUES (12, 10.26, 2.18)

    Veritabanına bağlantı fonksiyonla yapılır. mysqli_connect formata göre: mysqli_connect($servidor,$usuario,$clave,$base_datos) bağlantı nesnesine bir işaretçi döndüren ve erişimi tanımlayan değişkenleri (kullanıcı adı, parola... gibi) kullanan ve komut dosyasında gelecekteki varsayımsal kullanımlar için önceden atanmış olan değişkenleri kullanan.

    Bağlantının başarılı olup olmadığını tespit etmek için fonksiyon kullanılır mysqli_connect_errno() bu, oluşmuş olabilecek hata numarasını veya bağlantı doğru şekilde kurulmuşsa sıfırı (yanlış) döndürür. Hataları bildirmek için HTTP isteğinde bulunan uygulamaya, bu durumda HTTP'de çalıştırılan programa sıfır değeriyle yanıt verilir. uC IoT düğümünün.

    Saklanan metne eklemeden önce $consulta_sql siparişin oluşturulduğu SQL Veritabanı sunucusuna gönderilen POST istek değişkenlerine gelen bilgiler, en azından bir saldırıyı önlemek için önceden işlenir. SQL enjeksiyonu. Önceki örnekte, karşılık gelen veri türüne dönüştürme zorunlu kılınmıştır. (int) (tamsayı) veya (float) (kayan noktalı ondalık sayı) bu, istek verilerine eklenen olası kötü amaçlı kodları ortadan kaldırmak için yeterli olacaktır. web sunucusu.

    Görülebileceği gibi PHP dili Sırayı oluşturan metinleri birleştirmek için nokta simgesi (.) kullanılır. SQL veya zaten bir değişkeni saklayan metnin sağına metin eklemek için nokta ve eşittir işareti operatörü (.=) ve tek tırnak (') yalnızca karakterleri değil metin sabitlerini de içine almak için kullanılır. Bu durumda çift tırnak («) da kullanılabilmesine rağmen, PHP dili içeriği işlemek için kullanılır; örneğin metin içindeki değişkenler biçimindeki değişkenler dahil $texto="Me llamo $nombre"; formata alternatif olarak $texto='Me llamo '.$nombre; ayrıca ödevde olduğu gibi çiftler tekler içinde veya tekler çiftler içinde değiştiğinde kaçış işaretlerini kullanmak zorunda kalmadan bir türden alıntıları diğerine eklemenize olanak tanır $texto='esto no hay que "escaparlo" en PHP';.

    Sorguyu sunucuya yürütmek için MySQL fonksiyon kullanıldı mysqli_query format ile mysqli_query($conexion,$consulta_sql) veritabanına nesne bağlantısını ve sipariş metnini parametre olarak alan SQL bu bestelenmiştir.

    İşlevi mysqli_query($conexion,$consulta_sql) Uygulanabilirse döndürülen verilerde geçiş yapmak için veya yukarıdaki örnekte olduğu gibi, özellikle işlemin tabloda oluşturduğu yeni kayda atanan dizini bilmek amacıyla işlem hakkında bilgi edinmek için kullanılabilecek bir imleç nesnesi döndürür " ısıtıcılar" işleviyle mysqli_insert_id($conexion)

    tarafından döndürülen değer mysqli_query($conexion,$consulta_sql) Bir hatanın oluştuğunu belirlemek için bir boole işleminde false olarak değerlendirilebilir. Önceki örnekte, bağlantı hatası durumunda olduğu gibi, POST isteğinde bulunan uygulamaya sıfır döndürmek için kullanıldı. Bu şekilde program, işlem doğruysa yeni kaydın indeksini temsil eden sıfırdan büyük bir sayıyı, işlem hata üretiyorsa sıfırı döndürecektir.

    Veritabanı bağlantısına atanmış olan kaynakları serbest bırakmak için, bağlantı işlevi kullanılarak "kapatılır" mysqli_close($conexion)

    Veritabanındaki bilgileri okuyun

    mimariler hariç sis hesaplama Çoğu IoT düğümü, sensörleri tarafından yakalanan bilgileri sunucuya göndermekle kendilerini sınırlar. web sunucusu Onlarla yalnızca bilgiyi depolamak için iletişim kurar, dolayısıyla önceki örnekte bu uygulamada ortaya çıkacak durumların büyük bir kısmı zaten çözülmüştür. Bir sonraki adım, Nesnelerin İnterneti'ne bağlı cihazlar tarafından izlenen verileri gösteren bir web sitesi oluşturmak olabilir. önyüz bu, bu eğitim serisinde tartışılanların dışındadır.

    Olabilecek şey, bir IoT düğümünün belirli bir etkileşime sahip olması ve geçmiş bir veriye göre farklı davranması veya kendisine bir sunucudan gelen bir konfigürasyona göre davranışının değiştirilme olasılığını öngörmesi veya hatta düğümün grafik gösteren bir ekran olmasıdır. yakın zamanda izlenen verilerle önceki tarihlerde elde edilen verilerle karşılaştırıldı. Tüm bu durumlar için sunucudan veri okuyabilmek de ilginçtir MySQL sayesinde web sunucusu sıcaklığın 40°C'yi aştığı anlara göre belirlenen alarm durumlarının tarihlerinin bir listesinin elde edilmesini simüle eden aşağıdaki örnekte gösterildiği gibi

    Yukarıdaki örnekte veritabanını sorgulamak için şu komut kullanılmıştır: SQL SELECT temel formata göre SELECT campos FROM tabla WHERE condición ORDER BY campo DESC işlevleri tarih alanına eklemenin tek özelliği DAY, MONTH, YEAR y TIME günü, ay sayısını, yılı ve saati ayrı ayrı elde etmek için. Uygulanan koşul, sıcaklığın 40.0'dan büyük olması ve tarih alanı kullanılarak en yüksekten (en güncel) en düşüğe (en eskiye) kadar sıralanması ve bunu maddeyle birlikte belirtmesidir. DESC

    Bir döngüden sorgunun döndürdüğü değerler arasında döngü yapmak için for bilinen bir boyutla fonksiyon kullanılır mysqli_num_rows($resultado) bulunan kayıtların sayısını gösterir. Fonksiyon ile mysqli_data_seek($resultado,$numero_resultado) sonuç imleci döngü sayacı tarafından ifade edilen belirli bir konuma taşınabilir for, $numero_resultado, örnekte.

    Sonuç imlecinin işaret ettiği kayıt alanlarını bir vektörde saklamak için fonksiyon kullanılır. mysqli_fetch_row($resultado) değişkene atanan $registro bunlar daha sonra farklı değerlere sahip bir ifade oluşturmak için kullanılacak ve bunlara dizinlerinden erişilecektir.

    Tüm değerler geçildikten sonra sorgu sonucuna atanan kaynaklar serbest bırakılır SQL işlevi ile mysqli_free_result($resultado)

    Veritabanındaki bilgileri işleyin. Değerleri karşılaştırın.

    Bazı durumlarda, bu tarzdaki IoT düğümlerinde bunu yapmak mümkün olsa bile, bilgi işlemenin sunucuda merkezileştirilmesi uygundur. sis hesaplama. Aşağıdaki örnekte bunun için simüle edilen nedenler güvenliktir; Düğüm, anahtarı (kilit) ve bir istek (anahtar) hakkında bilgiye sahiptir ancak her ikisinin birleşimine yol vermenin uygun olup olmadığını bilmediğinden, kararı veren sunucuya danışmalıdır. Veritabanınıza yapılan bir sorgunun sonucuna göre sıfır (başarısız bir karşılaştırmayı belirtmek için) veya bir (karşılaştırmanın başarılı olduğunu belirtmek için) yanıtını vererek düğümü bilgilendirir.

    Bu mazeretle, Nesnelerin İnterneti'ne bağlı cihazdan veri alındığı (bir anahtar kodu ve bir kilit kodu), bir sonuç döndürüldüğü (sonucun doğru veya yanlış olmasına bağlı olarak bir veya sıfır) ve Veritabanına danışıldığında elde edilen sonuçların IoT düğümü tarafından gönderilenlerle karşılaştırılmasını içeren küçük bir bilgi işleme gerçekleştirilir.

    Önceki örnekte, onaltılık sayıyı temsil eden ve IoT cihazı tarafından gönderilen metinden ondalık sayı elde etmek için hexdec işlevi kullanıldı. Bu işlevi kullanmanın ek avantajı, daha önce açıklandığı gibi, kod ekleyerek bir saldırıyı önlemektir. SQL POST isteğinin verileri için kötü amaçlıdır.

    Yorum Ekle

    Kaçırmış Olabilirsiniz