PHP 프로그래밍 언어에서 데이터베이스에 액세스

PHP 프로그래밍 언어에서 데이터베이스에 액세스

PHP 프로그래밍 언어에서 데이터베이스에 액세스

목차

    IoT 웹 서버HTTP POST IoT 웹 서버MySQL 데이터베이스. IoT 웹 서버PHP 언어 IoT 웹 서버

    이 시리즈의 마지막 기사에서는 웹 서버를 사용하여 사물 인터넷에 연결된 장치의 데이터 저장, 데이터베이스에 기록하는 방법을 설명합니다. MySQL의 IoT 노드가 HTTP POST 요청을 하는 서버에 보내는 정보입니다. 전체 블로그의 이 기사를 읽는 독자들은 특히 프로그래밍에 익숙하지 않을 수 있습니다. PHP 언어 하지만 프로그래밍에는 확실히 그렇습니다. 마이크로 컨트롤러 언어로 C o C + + 따라서 변수 앞에 달러 기호($)를 붙이는 것과 같은 일부 세부 사항을 제외하고 예제는 특정 특정이 아닌 매우 중립적인 프로그래밍 스타일을 따라 수행되었기 때문에 추가 설명 없이 예제를 따라갈 수 있습니다. PHP.

    데이터베이스에 정보 저장

    에 관한 기사에서 설명했듯이 웹 서버에 HTTP POST 요청을 하여 IoT 데이터 저장, 헤더 끝에 있는 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() 발생했을 수 있는 오류 번호를 반환하거나 연결이 올바르게 설정된 경우 0(거짓)을 반환합니다. 오류를 알리기 위해 HTTP 요청을 하는 애플리케이션은 0 값으로 응답합니다. 이 경우에는 다음에서 실행되는 프로그램이 µC 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 요청을 하는 애플리케이션에 0을 반환하는 데 사용되었습니다. 이러한 방식으로 프로그램은 작업이 올바른 경우 새 레코드의 인덱스를 나타내는 0보다 큰 숫자를 반환하고 작업에서 오류가 발생하는 경우 0을 반환합니다.

    데이터베이스 연결에 할당된 리소스를 해제하려면 다음 기능을 사용하여 "닫습니다". 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 노드에서 정보 처리가 가능하더라도 서버에 중앙 집중화하는 것이 편리합니다. 포그 컴퓨팅. 다음 예에서 시뮬레이션된 이유는 보안입니다. 노드는 자신의 키(잠금)와 요청(키)에 대한 정보를 가지고 있지만 두 가지의 조합을 양보하는 것이 적절한지 알지 못하므로 결정을 내리는 서버와 상의해야 합니다. 데이터베이스에 대한 쿼리 결과에 따라 0(비교 실패를 나타냄) 또는 1(비교가 성공했음을 나타냄)으로 응답하여 노드에 알립니다.

    이러한 변명으로 사물 인터넷에 연결된 장치로부터 데이터(키 코드 및 잠금 코드)를 수신하고 결과가 반환되는(참 또는 거짓 결과에 따라 1 또는 0) 예를 볼 수 있습니다. 데이터베이스를 참조하여 얻은 결과와 IoT 노드에서 보낸 결과를 비교하는 것으로 구성된 정보의 작은 처리가 수행됩니다.

    이전 예에서 hexdec 함수는 IoT 장치에서 보낸 16진수를 나타내는 텍스트에서 10진수를 가져오는 데 사용되었습니다. 이 기능을 사용하면 앞서 설명한 것처럼 코드를 추가하여 공격을 피할 수 있다는 추가 이점이 있습니다. SQL POST 요청의 데이터에 악의적입니다.

    코멘트 남기기

    당신은 놓쳤을 수도 있습니다