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

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

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

Содержание

    Веб-сервер Интернета вещейВеб-сервер HTTP POST IoTБаза данных MySQL. Веб-сервер Интернета вещейВеб-сервер 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() который возвращает номер ошибки, которая могла произойти, или ноль (ложь), если соединение было установлено правильно. Чтобы уведомить об ошибках, приложению, выполняющему HTTP-запрос, возвращается нулевое значение, в данном случае программе, которая выполняется в мкКл узла Интернета вещей.

    Прежде чем добавлять текст, хранящийся в $consulta_sql с помощью чего составлен заказ SQL отправляется на сервер базы данных. Информация, поступившая в переменные запроса POST, предварительно обрабатывается, как минимум, во избежание атаки со стороны SQL-инъекция. В предыдущем примере преобразование в соответствующий тип данных принудительное. (int) (целое число) или (float) (десятичное число с плавающей запятой), чего было бы достаточно для устранения возможного вредоносного кода, добавленного в данные запроса с помощью веб-сервер.

    Как видно, в язык PHP Символ точки (.) используется для объединения текстов, образующих заказ. SQL или оператор точки и знака равенства (.=), чтобы добавить текст справа от того, в котором уже хранится переменная, а одинарная кавычка (') также используется для заключения текстовых констант, а не только символов. Хотя в этом случае также можно использовать двойные кавычки («)», в язык PHP используются для обработки контента, например, включения переменных внутри текста в формате $texto="Me llamo $nombre"; как альтернатива формату $texto='Me llamo '.$nombre; также позволяет включать кавычки одного типа в другой без необходимости использования escape-знаков всякий раз, когда двойные чередуются внутри одинарных или одиночные внутри двойных, как в задании $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 обладает определенной интерактивностью и ведет себя по-разному в зависимости от исторических данных или предвидит возможность изменения своего поведения в соответствии с конфигурацией, поступающей к нему с сервера, или даже узел представляет собой экран, на котором отображается график. с данными, которые недавно отслеживались, по сравнению с данными, полученными в предыдущие даты. Для всех этих ситуаций также интересно иметь возможность читать данные с сервера. 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-запроса.

    Оставить комментарий

    Вы могли пропустить