الوصول إلى قاعدة البيانات من لغة البرمجة PHP

الوصول إلى قاعدة البيانات من لغة البرمجة PHP

الوصول إلى قاعدة البيانات من لغة البرمجة PHP

جدول المحتويات

    خادم ويب إنترنت الأشياءHTTP POST خادم ويب إنترنت الأشياءقاعدة بيانات ماي إس كيو إل. خادم ويب إنترنت الأشياءخادم ويب لغة PHP وإنترنت الأشياء

    في هذه المقالة الأخيرة في السلسلة على استخدام خادم الويب لتخزين البيانات من الأجهزة المتصلة بإنترنت الأشياءيشرح كيفية التسجيل في قاعدة البيانات MySQL المعلومات التي ترسلها عقد إنترنت الأشياء إلى الخادم لتقديم طلبات HTTP POST. قد لا يكون قراء هذه المقالة، في المدونة بأكملها، على دراية خاصة بالبرمجة في لغة PHP ولكن بالتأكيد نعم مع برمجة ميكروكنترولر في اللغات C o C + + لذلك، باستثناء بعض التفاصيل، مثل وضع علامة الدولار ($) على المتغيرات، ستتمكن من متابعة الأمثلة دون الحاجة إلى مزيد من التوضيحات حيث أنها تم إجراؤها باتباع أسلوب برمجة محايد للغاية، وليس خاصًا بـ PHP.

    تخزين المعلومات في قاعدة البيانات

    كما هو موضح في المقال الخاص ب تخزين بيانات إنترنت الأشياء عن طريق تقديم طلبات 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() الذي يُرجع رقم الخطأ الذي ربما حدث أو صفر (خطأ) إذا تم إنشاء الاتصال بشكل صحيح. للتنبيه بالأخطاء، يتم الرد على التطبيق الذي يقوم بطلب HTTP بقيمة صفر، وفي هذه الحالة يتم تنفيذ البرنامج في µ ج من عقدة إنترنت الأشياء.

    قبل الإضافة إلى النص المخزن فيه $consulta_sql الذي يتكون منه الأمر SQL التي يتم إرسالها إلى خادم قاعدة البيانات، تتم معالجة المعلومات التي وصلت في متغيرات طلب POST مسبقًا، على الأقل، لتجنب أي هجوم من قبل حقن SQL. في المثال السابق، يتم فرض التحويل إلى نوع البيانات المقابل (int) (عدد صحيح) أو (float) (الفاصلة العشرية العائمة) والتي ستكون كافية لإزالة التعليمات البرمجية الضارة المحتملة التي تمت إضافتها إلى بيانات الطلب بواسطة خادم الويب.

    كما يتضح ، في لغة 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) يمكن تقييمه إلى خطأ في عملية منطقية لتحديد حدوث خطأ. في المثال السابق يتم استخدامه لإعادة صفر إلى التطبيق الذي يقوم بطلب POST، كما في حالة خطأ الاتصال. بهذه الطريقة، سيقوم البرنامج بإرجاع رقم أكبر من الصفر يمثل فهرس السجل الجديد إذا كانت العملية صحيحة أو صفر إذا أدت العملية إلى خطأ.

    لتحرير الموارد التي تم تعيينها لاتصال قاعدة البيانات، يتم "إغلاقها" باستخدام الوظيفة mysqli_close($conexion)

    قراءة المعلومات من قاعدة البيانات

    باستثناء في أبنية ل حوسبة الضباب تقتصر معظم عقد إنترنت الأشياء على إرسال المعلومات التي تلتقطها أجهزة الاستشعار الخاصة بها إلى الخادم، أي خادم الويب فهو يتواصل معهم فقط لتخزين المعلومات، لذلك مع المثال السابق تم بالفعل حل جزء كبير من الحالات التي ستنشأ في هذا التطبيق. يمكن أن تكون الخطوة التالية هي إنشاء موقع ويب يعرض البيانات التي تراقبها الأجهزة المتصلة بإنترنت الأشياء، وهو عمل الواجهة الأمامية وهو خارج ما تتم مناقشته في هذه السلسلة من الدروس.

    ما يمكن أن يحدث هو أن تتمتع عقدة إنترنت الأشياء بتفاعل معين وتتصرف بشكل مختلف بناءً على بيانات تاريخية أو تتوقع إمكانية تغيير سلوكها وفقًا للتكوين الذي يأتي إليها من الخادم أو حتى العقدة عبارة عن شاشة تعرض رسمًا بيانيًا مع البيانات التي تم رصدها مؤخرا مقارنة بتلك التي تم الحصول عليها في التواريخ السابقة. في كل هذه المواقف، من المثير للاهتمام أيضًا أن تكون قادرًا على قراءة البيانات من الخادم MySQL من خلال خادم الويب كما هو موضح في المثال التالي الذي يحاكي الحصول على قائمة بتواريخ حالات الإنذار المحددة باللحظات التي تجاوزت فيها درجة الحرارة 40 درجة مئوية

    في المثال أعلاه، للاستعلام عن قاعدة البيانات، يتم استخدام الأمر 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)

    معالجة المعلومات من قاعدة البيانات. قارن القيم.

    في بعض المناسبات، يكون من المناسب أن تتم معالجة المعلومات بشكل مركزي على الخادم حتى لو كان من الممكن القيام بذلك في عقد إنترنت الأشياء بالأسلوب حوسبة الضباب. في المثال التالي الأسباب التي تمت محاكاتها للقيام بذلك هي الأمان؛ العقدة لديها معلومات عن مفتاحها (القفل) وعن الطلب (المفتاح) ولكنها لا تعرف ما إذا كان من المناسب إفساح المجال للجمع بين الاثنين، لذلك يجب عليها استشارة الخادم، وهو الذي يتخذ القرار و يقوم بإعلام العقدة عن طريق الرد على صفر (للإشارة إلى مقارنة فاشلة) أو واحد (للإشارة إلى نجاح المقارنة) بناءً على نتيجة استعلام قاعدة البيانات الخاصة بك.

    وبهذا العذر، يمكنك رؤية مثال يتم فيه تلقي البيانات من الجهاز المتصل بإنترنت الأشياء (رمز المفتاح ورمز القفل)، ويتم إرجاع النتيجة (واحد أو صفر اعتمادًا على كون النتيجة صحيحة أو خاطئة) و يتم إجراء معالجة صغيرة للمعلومات تتكون من مقارنة النتائج التي تم الحصول عليها عند مراجعة قاعدة البيانات مع تلك المرسلة بواسطة عقدة إنترنت الأشياء.

    في المثال السابق، يتم استخدام الدالة hexdec للحصول على رقم عشري من نص يمثل رقمًا سداسيًا عشريًا وهو الرقم الذي يتم إرساله بواسطة جهاز IoT. الميزة الإضافية لاستخدام هذه الوظيفة هي تجنب الهجوم عن طريق إضافة التعليمات البرمجية، كما هو موضح سابقًا SQL ضارة لبيانات طلب POST.

    أكتب تعليق

    ربما تكون قد فاتتك