Модерни и сигурни връзки към бази данни с PHP

Съдържание
Ако има нещо, което може да навреди на дадено приложение, това е, когато не използваме адекватни ресурси, за да го направим по -бързо и по -безопасно, има много начини да подобрим скоростта и сигурността на приложенията, това може да стане чрез използване на по -добри модели за разработка, прилагане на по -голяма сигурност на сървърите и т.н.
Има обаче момент, в който много пъти не спираме да мислим и това е, ако инструментът, който ни дава езикът, е най -добрият за работата, която вършим. Това се случва много в PHP Въпреки факта, че в продължение на много години има предупреждение да не се използва функцията mysql_connect () за установяване на връзки към Бази данни, изглежда много разработчици не осъзнават голямата грешка, която правят, когато я използват.
PHP има естествена поддръжка за голям брой двигатели Бази данни които съществуват на пазара, но неговата интеграция с MySQL това е почти задължителна отправна точка за повечето потребители.
mysql_connect ()От версията 5.5 на PHP класическа функция mysql_connect () е в състояние отхвърлен, тоест остарял е и силно се препоръчва да не се използва, тъй като няма да бъде включен в бъдещите версии на езика.
Алтернативата за осъществяване на връзката преминава през два елемента, първият е да използвате една и съща езикова структура за осъществяване на връзки или да използвате новата библиотека за свързване с MySQL. Тук може да дойде първият въпрос, защо просто да се замислим MySQL? Е, отговорът е прост, това е начало, това е най -простото и най -полезно нещо, което можем да обясним първоначално, ако познаваме тази база, можем да екстраполираме към други двигатели и драйвери.
Първата алтернатива на свързване към База данни е да използвате собствения обект на данни на езика, наречен PHP обект на данни или неговото съкращение ЗНП. Това не е нищо повече от голямо писмено разширение на езика ° С което ни позволява да установим връзки с различни видове двигатели Бази данни и че има стандартни методи, които ни дават възможност за писане на кросплатформени приложения, тоест не е нужно да променяме синтаксиса, ако сменим механизма на базата данни.
Първоначално казахме, че ще се съсредоточим върху MySQL, но ако установим връзка чрез ЗНП това, което правим, можем да приложим към други двигатели. За това трябва само да активираме или включим драйверите за споменатите двигатели и да ги активираме във файла php.ini от сървъра.
За да се свържете с a База данни просто трябва да установим връзката, използвайки подходящия за нея метод, в ЗНП връзката се постига с три основни параметъра, името на сървъра на базата данни, потребителското име и неговата парола.
Единственият параметър от тези три, който се нуждае от обяснение, е този на сървъра на базата данни, в миналото трябваше да избираме База данни Чрез конкретна функция след установяване на връзката, в този случай ще го направим в същия низ, така че нашият низ на името на сървъра ще изглежда така:
mysql: host = hostname; dbname = dbname

Виждаме, че в този случай първоначално задаваме двигателя mysql тогава с хост ще ви кажем кой е сървърът, тук може да бъде a IP или localhost ако сървърът е локален, накрая с dbname предаваме името на базата данни, към която искаме да се свържем. На следващото изображение ще наблюдаваме как трябва да се свърже код, използвайки ЗНП:

Увеличете

Тъй като знаем началната стъпка как да се свържем, сега трябва да научим как можем да изпълняваме заявки, обикновено в миналото сме използвали директно изпълнението на заявката с нейните параметри, тази практика изобщо не е безопасна, тъй като ни прави склонни да атаки от този тип SQL инжектиране, ЗНП ни позволява да използваме т.нар Подготвени статии което не е нищо повече от изпълнение на заявката по параметризиран начин, така че самата библиотека върши работа по отстраняване на грешки и е по -малко податлива на атаки. Нека да видим по -нататък как да изпълним проста заявка и след това нейния еквивалент с Подготвен Стамент.
В тази проста заявка ще приемем, че имаме таблица в нашата База данни обади се Автор който получава авторски код и след това неговото име, разбира се, че е демонстративно, не е пример за добра таблица, интересува ни само да разберем как работи връзката от ЗНП.
На изображението виждаме, че наричаме метод, наречен заявка () от обекта, създаден с низа за връзка с PDO, след това пишем нашата заявка без много проблеми:

Увеличете

Проблемът е, че получаваме стойностите директно, така че няма начин да подобрим и използваме повторно това, вместо това, ако направим a Подготвен Стамент, ще видим, че първо посочваме коя е заявката за изпълнение, след това с друг метод го правим ефективен и му предаваме необходимите стойности. Това включва двигателя за отстраняване на грешки в параметрите. ЗНП като по този начин се осигурява допълнително ниво на защита. Нека видим на следващото изображение как би изглеждал предишният пример при използване Подготвени статии сега.

Увеличете

На пръв поглед това може да изглежда донякъде сложно и не оптимално, но ако анализираме, виждаме, че първо установяваме заявката, която ще бъде изпълнена, след това създаваме масив с параметрите, които нашата заявка ще получи, в случая с примера, който получаваме кода на автора и неговото име, накрая изпълняваме заявката и й предаваме масива от параметри.
Ако искаме да се консултираме, след като вече сме вмъкнали някои стойности в нашата База данни много е просто, просто трябва да го направим със заявка SELECT, това ще ни позволи да донесем записите, в миналото сме разчитали на функции като напр mysql_fetch_array () или mysql_fetch_assoc () който след консумация ни остави неспособни да управляваме резултатите си отново.
С ЗНП Ще вземем данните директно от обекта, така че винаги ще ги имаме достъпни по време на изпълнение, нека видим в следния пример как би било направено:

Виждаме как първоначално правим a Подготвен Стамент, ние правим проста заявка в този случай и след това с цикъл докато () ние ще получим всеки от записите и ще ги отпечатаме, ако забележим, че не се позоваваме на тях MySQL навсякъде в нашия код, така че ако променим низа за връзка и използваме друг двигател, който има таблица и a База данни със същото име и структура, ние ще можем да получим вашите данни, без да се налага да променяме нашия код.
Какво MySQL е най -популярният механизъм за бази данни за интегриране PHP, има и алтернатива и е така MySQLi което не е нищо повече от обектно-ориентиран интерфейс. Начинът му на работа е много подобен на този на ЗНППромените обаче са, че той е само за този популярен механизъм за бази данни, така че преобразуването между различни платформи не би било възможно.
Неговият низ за връзка е малко по -малко сложен, тъй като разделя името на сървъра в хоста и базата данни, която ще се използва в два различни параметъра, в допълнение към името и паролата на потребителя, нека видим как изглежда:
$ objConex = нов mysqli (HostName, потребител, парола, DatabaseName);

Нека да видим в следния пример как установяваме връзка, използвайки MySQLi и как можем да извършим просто вмъкване на данни:

Увеличете

Отбелязваме, че има сходство с ЗНП като има метод заявка () също така, но това ще работи само за MySQL.
Сега ще получаваме и преглеждаме данните, които можем да получим от заявка, за това ще използваме същия метод заявка () и след това метода fetch_assoc () за да получите резултатите:

Най -интересното, което забелязахме, е, че използваме метода близо (), това, което прави, затваря текущата връзка и почиства буфера по такъв начин, че да оптимизира използването на ресурсите на сървъра.
ВажноТрябва да имаме предвид, че ако имаме система, направена в стара версия на PHP и няма да мигрираме към нови версии, може би ще променим низовете за връзка на База данни и методите на заявките може да не са добра идея за работата, която представлява. Ако обаче искаме да правим нови приложения и системи, най -добре е да започнем със солидна основа, използвайки тези нови библиотеки с поддръжка в бъдещите версии на PHP.
С това завършихме този урок, видяхме, че новите алтернативи са много по -чисти и по -безопасни, а тяхната лекота на използване ги прави подходящи за настоящите времена.Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave