เข้าถึงฐานข้อมูลจากภาษาการเขียนโปรแกรม PHP

เข้าถึงฐานข้อมูลจากภาษาการเขียนโปรแกรม PHP

เข้าถึงฐานข้อมูลจากภาษาการเขียนโปรแกรม PHP

สารบัญ

    เว็บเซิร์ฟเวอร์ IoTHTTP POST IoT เว็บเซิร์ฟเวอร์ฐานข้อมูล MySQL เว็บเซิร์ฟเวอร์ IoTเว็บเซิร์ฟเวอร์ IoT ภาษา PHP

    ในบทความสุดท้ายของซีรีส์เรื่อง การใช้เว็บเซิร์ฟเวอร์เพื่อจัดเก็บข้อมูลจากอุปกรณ์ที่เชื่อมต่อกับ Internet of Things, อธิบายวิธีการบันทึกลงฐานข้อมูล MySQL ข้อมูลที่โหนด IoT ส่งไปยังเซิร์ฟเวอร์ที่ทำการร้องขอ HTTP POST ผู้อ่านบทความนี้จากทั้งบล็อกอาจไม่คุ้นเคยกับการเขียนโปรแกรมใน ภาษาพีพีพี แต่ใช่แน่นอนกับการเขียนโปรแกรมของ ไมโครคอนโทรลเลอร์ ในภาษา C o C + + ดังนั้น ยกเว้นรายละเอียดบางอย่าง เช่น นำเครื่องหมายดอลลาร์ ($) นำหน้าตัวแปร คุณจะสามารถติดตามตัวอย่างได้โดยไม่จำเป็นต้องอธิบายเพิ่มเติม เนื่องจากได้ทำตามรูปแบบการเขียนโปรแกรมที่เป็นกลางมาก โดยไม่เฉพาะเจาะจงกับ PHP.

    เก็บข้อมูลไว้ในฐานข้อมูล

    ตามที่อธิบายไว้ในบทความเรื่อง การจัดเก็บข้อมูล IoT โดยส่งคำขอ HTTP POST ไปยังเว็บเซิร์ฟเวอร์ที่ส่วนท้ายของส่วนหัว เนื้อความของคำขอ POST จะมีข้อมูลที่ส่งไปยังเซิร์ฟเวอร์ วิธีทั่วไปในการส่งข้อมูลนี้ไปยังเซิร์ฟเวอร์คือรูปแบบข้อความธรรมดา เนื่องจากง่ายต่อการวิเคราะห์แม้จะ "ด้วยตนเอง" เมื่อข้อมูลที่ส่งไปยังเซิร์ฟเวอร์มีความซับซ้อน จะสะดวกอย่างแน่นอนในการจัดโครงสร้างโดยใช้รูปแบบ เช่น XML o JSON. ในการใช้งานเว็บเซิร์ฟเวอร์ตามปกติเพื่อจัดการข้อมูลจากอุปกรณ์ที่เชื่อมต่อกับ Internet of Things ไม่ใช่เรื่องธรรมดาที่จะต้องมีโครงสร้างข้อมูล ดังนั้นจึงเป็นเรื่องปกติที่จะส่งข้อมูลในรูปแบบข้อความธรรมดาในรูปแบบ 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() ซึ่งส่งคืนหมายเลขข้อผิดพลาดที่อาจเกิดขึ้นหรือศูนย์ (เท็จ) หากสร้างการเชื่อมต่ออย่างถูกต้อง เพื่อแจ้งข้อผิดพลาด แอปพลิเคชันที่สร้างคำขอ HTTP จะได้รับการตอบสนองด้วยค่าศูนย์ ในกรณีนี้คือโปรแกรมที่รันใน ไมโครซี ของโหนด IoT

    ก่อนจะเพิ่มข้อความที่เก็บไว้เข้าไป $consulta_sql ซึ่งประกอบด้วยคำสั่ง SQL ที่ส่งไปยังเซิร์ฟเวอร์ฐานข้อมูลข้อมูลที่มาถึงในตัวแปรคำขอ POST จะถูกประมวลผลล่วงหน้าเป็นอย่างน้อยเพื่อหลีกเลี่ยงการโจมตีโดย การฉีด SQL. ในตัวอย่างก่อนหน้านี้ การแปลงเป็นชนิดข้อมูลที่เกี่ยวข้องจะถูกบังคับ (int) (จำนวนเต็ม) หรือ (float) (จุดทศนิยมทศนิยม) ซึ่งจะเพียงพอที่จะกำจัดโค้ดอันตรายที่เป็นไปได้ที่เพิ่มลงในข้อมูลคำขอด้วย เว็บเซอร์ด.

    อย่างที่เห็นใน ภาษาพีพีพี สัญลักษณ์จุด (.) ใช้เพื่อเชื่อมข้อความที่สร้างลำดับ SQL หรือตัวดำเนินการเครื่องหมายจุดและเท่ากับ (.=) เพื่อเพิ่มข้อความทางด้านขวาของตัวแปรที่เก็บตัวแปรไว้แล้ว และเครื่องหมายคำพูดเดี่ยว (') ยังใช้เพื่อใส่ค่าคงที่ของข้อความ ไม่ใช่แค่อักขระ แม้ว่าในกรณีนี้เครื่องหมายคำพูดคู่ («) ก็สามารถใช้ได้เช่นกัน ภาษาพีพีพี ใช้ในการประมวลผลเนื้อหา เช่น รวมถึงตัวแปรภายในข้อความในรูปแบบ $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) สามารถประเมินเป็นเท็จในการดำเนินการบูลีนเพื่อพิจารณาว่ามีข้อผิดพลาดเกิดขึ้น ในตัวอย่างก่อนหน้านี้ ใช้เพื่อส่งคืนค่าศูนย์ให้กับแอปพลิเคชันที่สร้างคำขอ POST เช่นในกรณีของข้อผิดพลาดในการเชื่อมต่อ ด้วยวิธีนี้ โปรแกรมจะส่งกลับตัวเลขที่มากกว่าศูนย์ซึ่งแสดงถึงดัชนีของบันทึกใหม่หากการดำเนินการถูกต้อง หรือส่งกลับค่าศูนย์หากการดำเนินการก่อให้เกิดข้อผิดพลาด

    หากต้องการเพิ่มทรัพยากรที่กำหนดให้กับการเชื่อมต่อฐานข้อมูล จะถูก "ปิด" โดยใช้ฟังก์ชัน mysqli_close($conexion)

    อ่านข้อมูลจากฐานข้อมูล

    ยกเว้นในสถาปัตยกรรมสำหรับ คอมพิวเตอร์หมอก โหนด IoT ส่วนใหญ่จำกัดตัวเองให้ส่งข้อมูลที่เซ็นเซอร์จับไปยังเซิร์ฟเวอร์ ซึ่งก็คือ เว็บเซอร์ด โดยจะสื่อสารกับพวกเขาเพื่อจัดเก็บข้อมูลเท่านั้น ดังนั้นด้วยตัวอย่างก่อนหน้านี้ ส่วนที่ดีของกรณีปัญหาที่จะเกิดขึ้นกับแอปพลิเคชันนี้ได้รับการแก้ไขแล้ว ขั้นตอนต่อไปอาจเป็นการสร้างเว็บไซต์ที่แสดงข้อมูลที่ตรวจสอบโดยอุปกรณ์ที่เชื่อมต่อกับ Internet of Things ซึ่งเป็นผลงานของ ส่วนหน้า ซึ่งอยู่นอกเหนือสิ่งที่ถูกกล่าวถึงในบทช่วยสอนชุดนี้

    สิ่งที่สามารถเกิดขึ้นได้คือโหนด IoT มีการโต้ตอบบางอย่างและทำงานแตกต่างออกไปตามข้อมูลในอดีตหรือคาดการณ์ถึงความเป็นไปได้ในการเปลี่ยนแปลงพฤติกรรมตามการกำหนดค่าที่มาจากเซิร์ฟเวอร์ หรือแม้แต่โหนดก็เป็นหน้าจอที่แสดงกราฟ ด้วยข้อมูลที่ได้รับการตรวจสอบเมื่อเร็ว ๆ นี้เปรียบเทียบกับที่ได้รับในวันที่ก่อนหน้า สำหรับทุกสถานการณ์เหล่านี้ การอ่านข้อมูลจากเซิร์ฟเวอร์ก็น่าสนใจเช่นกัน MySQL ผ่าน เว็บเซอร์ด ดังแสดงในตัวอย่างต่อไปนี้ซึ่งจำลองการรับรายการวันที่ของสถานะการเตือนซึ่งกำหนดโดยช่วงเวลาที่อุณหภูมิเกิน 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 (รหัสกุญแจและรหัสล็อค) ผลลัพธ์จะถูกส่งกลับ (หนึ่งหรือศูนย์ ขึ้นอยู่กับผลลัพธ์ที่เป็นจริงหรือเท็จ) และ การประมวลผลข้อมูลเล็กน้อยประกอบด้วยการเปรียบเทียบผลลัพธ์ที่ได้รับเมื่อปรึกษาฐานข้อมูลกับผลลัพธ์ที่ส่งโดยโหนด IoT

    ในตัวอย่างก่อนหน้านี้ ฟังก์ชัน hexdec ใช้เพื่อรับเลขฐานสิบจากข้อความที่แสดงถึงเลขฐานสิบหกและเป็นตัวเลขที่ส่งโดยอุปกรณ์ IoT ข้อได้เปรียบเพิ่มเติมของการใช้ฟังก์ชันนี้คือการหลีกเลี่ยงการโจมตีโดยการเพิ่มโค้ดตามที่อธิบายไว้ก่อนหน้านี้ SQL เป็นอันตรายต่อข้อมูลของคำขอ POST

    แสดงความคิดเห็น

    คุณอาจจะพลาด