Acesse o banco de dados a partir da linguagem de programação PHP

Acesse o banco de dados a partir da linguagem de programação PHP

Acesse o banco de dados a partir da linguagem de programação PHP

Tabela de conteúdos

    Servidor web IoTServidor Web HTTP POST IoTBanco de dados MySQL. Servidor web IoTServidor Web IoT em linguagem PHP

    Neste último artigo da série sobre o Usando um servidor web para armazenar dados de dispositivos conectados à Internet das Coisas, explica como registrar em um banco de dados MySQL as informações que os nós IoT enviam ao servidor que faz solicitações HTTP POST. Os leitores deste artigo, de todo o blog, podem não estar particularmente familiarizados com a programação no Linguagem PHP mas certamente sim com a programação de microcontroladores em idiomas C o C + + portanto, exceto por alguns detalhes, como preceder o cifrão ($) nas variáveis, você poderá seguir os exemplos sem a necessidade de maiores explicações, pois foram feitos seguindo um estilo de programação muito neutro, não específico para PHP.

    Armazenar informações no banco de dados

    Como explicado no artigo sobre o Armazenamento de dados IoT fazendo solicitações HTTP POST para um servidor web, no final dos cabeçalhos, o corpo da solicitação POST contém os dados que são enviados ao servidor. A forma mais comum de enviar essas informações ao servidor é em formato de texto simples, pois é mais fácil analisá-las mesmo “manualmente”. Quando os dados enviados ao servidor forem complexos, certamente será conveniente estruturá-los utilizando, por exemplo, o formato XML o JSON. Na utilização habitual de um servidor web para gerenciar informações de dispositivos conectados à Internet das Coisas, não é comum a necessidade de uma estrutura de dados, por isso é normal enviá-los em texto simples no formato variable=valor.

    Na solicitação HTTP POST do exemplo a seguir, o recurso (normalmente uma página web) /iot/grabar_temperatura é solicitado ao servidor polaridad.es e são enviadas três variáveis: ne, tp e cr, que contêm respectivamente os valores " 12", "10.26 » e «2.18» Também é importante lembrar que existe uma linha em branco para separar os cabeçalhos dos dados.

    O objetivo final do código a seguir PHP enviará para o servidor de banco de dados MySQL a ordem SQL:

    Com o qual um novo registro será criado (INSERT)
    no banco de dados de aquecimento (INTO calefacciones)
    atribuindo a campos (numero_estancia,temperatura,corriente)
    os valores correspondentes à solicitação HTTP POST VALUES (12, 10.26, 2.18)

    A conexão com o banco de dados é feita com a função mysqli_connect de acordo com o formato: mysqli_connect($servidor,$usuario,$clave,$base_datos) que retorna um ponteiro para o objeto-conexão e que utiliza as variáveis ​​que definem o acesso (como usuário, senha...) e que foram previamente atribuídas para futuros usos hipotéticos no script.

    Para detectar se a conexão foi bem-sucedida, a função é usada mysqli_connect_errno() que retorna o número do erro que pode ter ocorrido ou zero (falso) se a conexão foi estabelecida corretamente. Para notificar erros, a aplicação que faz a solicitação HTTP é respondida com valor zero, neste caso o programa que é executado no μC do nó IoT.

    Antes de adicionar ao texto armazenado em $consulta_sql com o qual o pedido é composto SQL que é enviado ao servidor de banco de dados, as informações que chegaram nas variáveis ​​da solicitação POST são pré-processadas, no mínimo, para evitar um ataque por injeção SQL. No exemplo anterior, a conversão para o tipo de dados correspondente é forçada (int) (inteiro) ou (float) (vírgula flutuante decimal) o que seria suficiente para eliminar possíveis códigos maliciosos adicionados aos dados da solicitação por servidor web.

    Como pode ser visto, no Linguagem PHP O símbolo de ponto final (.) é usado para concatenar os textos que formam a ordem SQL ou o operador ponto e sinal de igual (.=) para adicionar texto à direita daquele que já armazena uma variável e as aspas simples (') também são usadas para incluir constantes de texto, não apenas caracteres. Embora neste caso também possam ser usadas aspas duplas («), em Linguagem PHP são usados ​​para processar o conteúdo, por exemplo, incluindo variáveis ​​dentro do texto no formato $texto="Me llamo $nombre"; como alternativa ao formato $texto='Me llamo '.$nombre; também permitindo que você inclua aspas de um tipo em outro sem ter que usar sinais de escape sempre que as duplas forem alternadas dentro de simples ou simples dentro de duplas como na tarefa $texto='esto no hay que "escaparlo" en PHP';.

    Para executar a consulta ao servidor MySQL função é usada mysqli_query com o formato mysqli_query($conexion,$consulta_sql) que toma como parâmetros a conexão do objeto com o banco de dados e o texto com o pedido SQL que foi composto.

    A função mysqli_query($conexion,$consulta_sql) retorna um objeto-cursor que pode ser utilizado para percorrer os dados retornados se for o caso ou, como no exemplo acima, para obter informações sobre a operação, especificamente para saber o índice atribuído ao novo registro que a operação criou na tabela " aquecedores" com a função mysqli_insert_id($conexion)

    O valor retornado por mysqli_query($conexion,$consulta_sql) pode ser avaliado como falso em uma operação booleana para determinar que ocorreu um erro. No exemplo anterior é utilizado para retornar, como no caso do erro de conexão, um zero para a aplicação que faz a solicitação POST. Desta forma, o programa retornará um número maior que zero que representa o índice do novo registro se a operação estiver correta ou zero se a operação produzir um erro.

    Para liberar os recursos que foram atribuídos à conexão com o banco de dados, ela é "fechada" através da função mysqli_close($conexion)

    Ler informações do banco de dados

    Exceto em arquiteturas para computação de névoa A maioria dos nós IoT limita-se a enviar as informações capturadas pelos seus sensores para o servidor, ou seja, o servidor web Ele apenas se comunica com eles para armazenar as informações, portanto com o exemplo anterior boa parte dos casos que surgirão nesta aplicação já foram resolvidos. O próximo passo poderia ser a criação de um site que mostrasse os dados monitorados por dispositivos conectados à Internet das Coisas, um trabalho de frontend que está fora do que está sendo abordado nesta série de tutoriais.

    O que pode acontecer é que um nó IoT tenha uma certa interatividade e se comporte de maneira diferente a partir de um dado histórico ou preveja a possibilidade de alterar seu comportamento de acordo com uma configuração que lhe chega de um servidor ou ainda o nó é uma tela que mostra um gráfico com os dados monitorados recentemente em comparação com os adquiridos em datas anteriores. Para todas estas situações também é interessante poder ler dados do servidor MySQL através servidor web conforme ilustrado no exemplo a seguir que simula a obtenção de uma lista das datas dos estados de alarme determinadas pelos momentos em que a temperatura ultrapassou os 40°C

    No exemplo acima, para consultar o banco de dados é utilizado o comando SQL SELECT de acordo com o formato básico SELECT campos FROM tabla WHERE condición ORDER BY campo DESC com a única peculiaridade de adicionar as funções ao campo data DAY, MONTH, YEAR y TIME para obter o dia, o número do mês, o ano e a hora separadamente. A condição imposta é que a temperatura seja superior a 40.0 e seja ordenada utilizando o campo de data da mais alta (mais atual) para a mais baixa (mais antiga) indicando-a com a cláusula DESC

    Para percorrer os valores retornados pela consulta de um loop for com uma dimensão conhecida a função é usada mysqli_num_rows($resultado) que indica o número de registros que foram encontrados. Com a função mysqli_data_seek($resultado,$numero_resultado) o cursor de resultados pode ser movido para uma posição específica expressa pelo contador de loop for, $numero_resultado, no exemplo.

    Para armazenar em um vetor os campos do registro apontado pelo cursor de resultado, utiliza-se a função mysqli_fetch_row($resultado) que é atribuído à variável $registro que posteriormente servirá para formar uma frase com os diferentes valores, acessando-os por seus índices.

    Uma vez percorridos todos os valores, os recursos atribuídos ao resultado da consulta são liberados SQL com função mysqli_free_result($resultado)

    Processar informações do banco de dados. Compare valores.

    Em algumas ocasiões é conveniente que o processamento da informação seja centralizado no servidor mesmo que fosse possível fazê-lo nos nós IoT no estilo computação de névoa. No exemplo a seguir, os motivos simulados para isso são segurança; O nó possui informações sobre sua chave (bloqueio) e sobre uma solicitação (chave), mas não sabe se é apropriado ceder à combinação de ambas, por isso deve consultar o servidor, que é quem toma a decisão e informa o nó respondendo zero (para indicar uma comparação com falha) ou um (para indicar que a comparação foi bem-sucedida) com base no resultado de uma consulta ao seu banco de dados.

    Com esta desculpa você pode ver um exemplo em que os dados são recebidos do dispositivo conectado à Internet das Coisas (um código de chave e um código de bloqueio), um resultado é retornado (um ou zero dependendo do resultado ser verdadeiro ou falso) e é realizado um pequeno processamento da informação que consiste em comparar os resultados obtidos na consulta à base de dados com os enviados pelo nó IoT.

    No exemplo anterior, a função hexdec é utilizada para obter um número decimal a partir de um texto que representa um número hexadecimal e é aquele enviado pelo dispositivo IoT. A vantagem adicional de usar esta função é evitar, como explicado anteriormente, um ataque adicionando código SQL malicioso para os dados da solicitação POST.

    Postar Comentário

    Você pode ter perdido