Доступ до бази даних з мови програмування PHP

Доступ до бази даних з мови програмування PHP

Доступ до бази даних з мови програмування PHP

Зміст

    Веб-сервер IoTВеб-сервер HTTP POST IoTБаза даних MySQL. Веб-сервер IoTВеб-сервер IoT на мові PHP

    У цій останній статті з серії про Використання веб-сервера для зберігання даних із пристроїв, підключених до Інтернету речей, пояснює, як записувати в базу даних 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, отримує у відповідь нульове значення, у цьому випадку програма, яка виконується в мкКл вузла IoT.

    Перед додаванням до тексту, який зберігається в $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) може отримати значення false у логічній операції, щоб визначити, що сталася помилка. У попередньому прикладі він використовується для повернення, як і у випадку помилки підключення, нуля програмі, яка робить запит POST. Таким чином, програма поверне число більше за нуль, яке представляє індекс нового запису, якщо операція правильна, або нуль, якщо операція породжує помилку.

    Щоб звільнити ресурси, які були призначені підключенню до бази даних, воно "закривається" за допомогою функції mysqli_close($conexion)

    Прочитати інформацію з бази даних

    За винятком архітектур для туманні обчислення Більшість вузлів IoT обмежуються надсиланням інформації, отриманої їхніми датчиками, на сервер, тобто веб-сервер Він спілкується з ними лише для збереження інформації, тому в попередньому прикладі значна частина випадків, які виникнуть у цій програмі, уже вирішена. Наступним кроком може бути створення веб-сайту, який показуватиме дані, що відстежуються пристроями, підключеними до Інтернету речей. зовнішній інтерфейс що виходить за межі того, що розглядається в цій серії навчальних посібників.

    Що може статися, так це те, що вузол 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 у стилі туманні обчислення. У наступному прикладі причинами, які симулюються для цього, є безпека; Вузол має інформацію про свій ключ (замок) і про запит (ключ), але не знає, чи доцільно поступитися комбінацією обох, тому він повинен звернутися до сервера, який приймає рішення та інформує вузол, відповідаючи нулем (щоб вказати на невдале порівняння) або одиницею (щоб вказати, що порівняння було успішним) на основі результату запиту до вашої бази даних.

    За допомогою цього виправдання ви можете побачити приклад, у якому дані отримуються з пристрою, підключеного до Інтернету речей (код ключа та код блокування), повертається результат (один або нуль залежно від того, чи є результат істинним чи хибним) і виконується невелика обробка інформації, яка складається з порівняння результатів, отриманих під час звернення до бази даних, з результатами, надісланими вузлом IoT.

    У попередньому прикладі функція hexdec використовується для отримання десяткового числа з тексту, який представляє шістнадцяткове число, яке надсилає пристрій IoT. Додатковою перевагою використання цієї функції є уникнення, як пояснювалося раніше, атаки шляхом додавання коду SQL шкідливий для даних запиту POST.

    Дати коментар

    Можливо, ви пропустили