...

Достъп до базата данни от езика за програмиране PHP

Достъп до базата данни от езика за програмиране PHP

Достъп до базата данни от езика за програмиране PHP

Съдържание

    Servidor-web-IoT Acceder a la base de datos desde el lenguaje de programación PHPHTTP-POST-Servidor-web-IoT Acceder a la base de datos desde el lenguaje de programación PHPBase-Datos-MySQL.-Servidor-web-IoT Acceder a la base de datos desde el lenguaje de programación PHPLenguaje-PHP-Servidor-web-IoT Acceder a la base de datos desde el lenguaje de programación 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 заявката, получава отговор със стойност нула, в този случай програмата, която се изпълнява в µC на IoT възела.

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

    Както се вижда, в 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 възли се ограничават до изпращане на информацията, уловена от техните сензори, към сървъра, т.е. servidor web Той само комуникира с тях, за да съхранява информацията, така че с предишния пример голяма част от случаите, които ще възникнат в това приложение, вече са решени. Следващата стъпка може да бъде създаването на уебсайт, който показва данните, наблюдавани от устройства, свързани с Интернет на нещата, дело на интерфейса което е извън това, което се обсъжда в тази поредица от уроци.

    Това, което може да се случи, е, че IoT възел има определена интерактивност и се държи по различен начин въз основа на исторически данни или предвижда възможността за промяна на поведението му според конфигурация, която идва от сървър или дори възелът е екран, който показва графика с данните, които са били наблюдавани наскоро в сравнение с тези, получени на предишни дати. За всички тези ситуации също е интересно да можете да четете данни от сървъра MySQL чрез servidor web както е илюстрирано в следния пример, който симулира получаване на списък с датите на алармените състояния, определени от моментите, в които температурата надвишава 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 заявката.

    Публикувай коментар

    Може да сте пропуснали