Akses database dari bahasa pemrograman PHP

Akses database dari bahasa pemrograman PHP

Akses database dari bahasa pemrograman PHP

Daftar Isi

    Server web IoTServer Web HTTP POST IoTBasis Data MySQL. Server web IoTServer Web IoT Bahasa PHP

    Dalam artikel terakhir dalam seri di Menggunakan server web untuk menyimpan data dari perangkat yang terhubung ke Internet of Things, menjelaskan cara merekam dalam database MySQL informasi yang dikirim node IoT ke server yang membuat permintaan HTTP POST. Pembaca artikel ini, dari keseluruhan blog, mungkin belum terlalu familiar dengan pemrograman di bahasa PHP tapi pastinya ya dengan pemrogramannya mikrokontroler dalam bahasa C o C + + jadi, kecuali untuk beberapa detail, seperti mendahului tanda dolar ($) pada variabel, Anda akan dapat mengikuti contoh tanpa memerlukan penjelasan lebih lanjut karena semuanya dilakukan dengan mengikuti gaya pemrograman yang sangat netral, tidak spesifik untuk PHP.

    Menyimpan informasi dalam database

    Seperti yang dijelaskan dalam artikel di Penyimpanan data IoT dengan membuat permintaan HTTP POST ke server web, di akhir header, isi permintaan POST berisi data yang dikirim ke server. Cara paling umum untuk mengirimkan informasi ini ke server adalah dalam format teks biasa karena lebih mudah untuk menganalisisnya bahkan "secara manual". Jika data yang dikirim ke server rumit, tentu akan lebih mudah untuk menyusunnya menggunakan, misalnya, format XML o JSON. Dalam penggunaan biasa server web untuk mengelola informasi dari perangkat yang terhubung ke Internet of Things, tidak umum diperlukan struktur data, jadi mengirimkannya dalam bentuk teks biasa dalam format adalah hal yang wajar. variable=valor.

    Dalam permintaan HTTP POST dari contoh berikut, sumber daya (biasanya halaman web) /iot/grabar_temperatura diminta dari server polaridad.es dan tiga variabel dikirim: ne, tp dan cr, yang masing-masing berisi nilai " 12", "10.26 » dan «2.18» Penting juga untuk diingat bahwa ada baris kosong untuk memisahkan header dari data.

    Tujuan akhir dari kode berikut PHP akan dikirim ke server database MySQL pesanan SQL:

    Dengan mana rekor baru akan dibuat (INSERT)
    dalam database pemanas (INTO calefacciones)
    menugaskan ke bidang (numero_estancia,temperatura,corriente)
    nilai yang sesuai dengan permintaan HTTP POST VALUES (12, 10.26, 2.18)

    Koneksi ke database dilakukan dengan fungsi tersebut mysqli_connect menurut formatnya: mysqli_connect($servidor,$usuario,$clave,$base_datos) yang mengembalikan pointer ke objek koneksi dan menggunakan variabel yang mendefinisikan akses (seperti pengguna, kata sandi...) dan yang sebelumnya telah ditetapkan untuk penggunaan hipotetis di masa depan dalam skrip.

    Untuk mendeteksi apakah koneksi telah berhasil, fungsi tersebut digunakan mysqli_connect_errno() yang mengembalikan nomor kesalahan yang mungkin terjadi atau nol (salah) jika koneksi dibuat dengan benar. Untuk memberitahukan kesalahan, aplikasi yang membuat permintaan HTTP direspon dengan nilai nol, dalam hal ini program yang dijalankan di mikroC dari simpul IoT.

    Sebelum menambahkan teks yang disimpan di $consulta_sql dengan mana pesanan itu dibuat SQL yang dikirim ke server database, informasi yang telah tiba di variabel permintaan POST diproses terlebih dahulu, minimal, untuk menghindari serangan oleh injeksi SQL. Pada contoh sebelumnya, konversi ke tipe data yang sesuai dilakukan secara paksa (int) (bilangan bulat) atau (float) (titik desimal mengambang) yang cukup untuk menghilangkan kemungkinan kode berbahaya yang ditambahkan ke data permintaan web servidor.

    Seperti yang bisa dilihat, di bahasa PHP Simbol titik (.) digunakan untuk menggabungkan teks-teks yang membentuk urutan SQL atau operator titik dan tanda sama dengan (.=) untuk menambahkan teks di sebelah kanan teks yang sudah menyimpan variabel dan tanda kutip tunggal (‘) juga digunakan untuk mengapit konstanta teks, bukan hanya karakter. Meskipun dalam hal ini tanda kutip ganda («) juga dapat digunakan, di bahasa PHP digunakan untuk memproses konten, misalnya, memasukkan variabel dalam teks dalam format $texto="Me llamo $nombre"; sebagai alternatif format $texto='Me llamo '.$nombre; juga memungkinkan Anda untuk memasukkan tanda kutip dari satu jenis ke jenis lainnya tanpa harus menggunakan tanda escape setiap kali ganda bergantian dalam tunggal atau tunggal dalam ganda seperti dalam tugas $texto='esto no hay que "escaparlo" en PHP';.

    Untuk mengeksekusi query ke server MySQL fungsi digunakan mysqli_query dengan format mysqli_query($conexion,$consulta_sql) yang mengambil parameter koneksi objek ke database dan teks dengan pesanan SQL yang telah disusun.

    Fungsi itu mysqli_query($conexion,$consulta_sql) mengembalikan objek kursor yang dapat digunakan untuk melintasi data yang dikembalikan jika berlaku atau, seperti pada contoh di atas, untuk memperoleh informasi tentang operasi, khususnya untuk mengetahui indeks yang ditetapkan ke catatan baru yang telah dibuat oleh operasi dalam tabel " pemanas" dengan fungsinya mysqli_insert_id($conexion)

    Nilai yang dikembalikan oleh mysqli_query($conexion,$consulta_sql) dapat mengevaluasi ke false dalam operasi boolean untuk menentukan bahwa telah terjadi kesalahan. Pada contoh sebelumnya digunakan untuk mengembalikan, seperti dalam kasus kesalahan koneksi, angka nol ke aplikasi yang membuat permintaan POST. Dengan cara ini, program akan mengembalikan angka yang lebih besar dari nol yang mewakili indeks dari record baru jika operasinya benar atau nol jika operasi menghasilkan kesalahan.

    Untuk mengosongkan sumber daya yang telah ditetapkan ke koneksi database, "ditutup" menggunakan fungsi tersebut mysqli_close($conexion)

    Membaca informasi dari database

    Kecuali dalam arsitektur untuk komputasi kabut Sebagian besar node IoT membatasi diri untuk mengirimkan informasi yang ditangkap oleh sensor mereka ke server, yaitu web servidor Itu hanya berkomunikasi dengan mereka untuk menyimpan informasi, jadi dengan contoh sebelumnya sebagian besar kasus yang akan muncul dalam aplikasi ini telah diselesaikan. Langkah selanjutnya adalah membuat situs web yang menampilkan data yang dipantau oleh perangkat yang terhubung ke Internet of Things, sebuah karya paling depan yang berada di luar apa yang dibahas dalam rangkaian tutorial ini.

    Apa yang bisa terjadi adalah bahwa node IoT memiliki interaktivitas tertentu dan berperilaku berbeda berdasarkan data historis atau memperkirakan kemungkinan mengubah perilakunya sesuai dengan konfigurasi yang datang dari server atau bahkan node tersebut adalah layar yang menampilkan grafik. dengan data yang baru-baru ini dipantau dibandingkan dengan yang diperoleh pada tanggal sebelumnya. Untuk semua situasi ini, menarik juga untuk bisa membaca data dari server MySQL melalui web servidor seperti yang diilustrasikan dalam contoh berikut yang mensimulasikan perolehan daftar tanggal status alarm yang ditentukan oleh momen di mana suhu melebihi 40°C

    Pada contoh di atas, untuk menanyakan database digunakan perintah SQL SELECT sesuai dengan format dasarnya SELECT campos FROM tabla WHERE condición ORDER BY campo DESC dengan satu-satunya kekhasan menambahkan fungsi ke bidang tanggal DAY, MONTH, YEAR y TIME untuk mendapatkan hari, nomor bulan, tahun dan waktu secara terpisah. Syarat yang diberlakukan adalah suhu lebih besar dari 40.0 dan diurutkan menggunakan kolom tanggal dari tertinggi (terkini) hingga terendah (terlama) yang ditunjukkan dengan klausa DESC

    Untuk mengulang nilai yang dikembalikan oleh kueri dari sebuah loop for dengan dimensi yang diketahui fungsi tersebut digunakan mysqli_num_rows($resultado) yang menunjukkan jumlah record yang telah ditemukan. Dengan fungsinya mysqli_data_seek($resultado,$numero_resultado) kursor hasil dapat dipindahkan ke posisi tertentu yang dinyatakan dengan penghitung loop for, $numero_resultado, dalam contoh.

    Untuk menyimpan dalam vektor bidang rekaman yang ditunjuk oleh kursor hasil, fungsi ini digunakan mysqli_fetch_row($resultado) yang ditugaskan ke variabel $registro yang nantinya akan digunakan untuk membentuk frase dengan nilai yang berbeda, mengaksesnya berdasarkan indeksnya.

    Setelah semua nilai dilintasi, sumber daya yang ditetapkan ke hasil kueri akan dilepaskan SQL dengan fungsi mysqli_free_result($resultado)

    Memproses informasi dari database. Bandingkan nilai.

    Pada beberapa kesempatan, akan lebih mudah jika pemrosesan informasi dipusatkan di server meskipun dimungkinkan untuk melakukannya di node IoT dengan gaya komputasi kabut. Dalam contoh berikut, alasan yang disimulasikan untuk melakukan hal tersebut adalah keamanan; Node memiliki informasi tentang kuncinya (kunci) dan tentang permintaan (kunci) tetapi tidak mengetahui apakah tepat untuk memberikan kombinasi keduanya, sehingga harus berkonsultasi dengan server, yang merupakan salah satu yang membuat keputusan dan memberi tahu node dengan merespons nol (untuk menunjukkan perbandingan yang gagal) atau satu (untuk menunjukkan bahwa perbandingan berhasil) berdasarkan hasil kueri ke database Anda.

    Dengan alasan ini Anda dapat melihat contoh di mana data diterima dari perangkat yang terhubung ke Internet of Things (kode kunci dan kode kunci), hasilnya dikembalikan (satu atau nol tergantung pada hasilnya benar atau salah) dan sedikit pemrosesan informasi dilakukan yang terdiri dari membandingkan hasil yang diperoleh saat berkonsultasi dengan database dengan yang dikirim oleh node IoT.

    Pada contoh sebelumnya, fungsi hexdec digunakan untuk memperoleh angka desimal dari teks yang mewakili angka heksadesimal dan dikirim oleh perangkat IoT. Keuntungan tambahan menggunakan fungsi ini adalah menghindari, seperti dijelaskan sebelumnya, serangan dengan menambahkan kode SQL berbahaya terhadap data permintaan POST.

    Anda mungkin melewatkannya