Moderne en veilige verbindingen met databases met PHP

Inhoudsopgave
Als er iets is dat een applicatie kan beschadigen, is het wanneer we niet de juiste middelen gebruiken om het sneller en veiliger te maken, er zijn veel manieren om de snelheid en veiligheid van de applicaties te verbeteren, dit kan zijn door betere ontwikkelingspatronen te gebruiken, het toepassen van een grotere beveiliging op de servers, enz.
Er is echter een punt waarop we vaak niet stoppen om na te denken en dat is of de tool die taal ons geeft het beste is voor het werk dat we doen. Dit gebeurt veel in PHP Ondanks het feit dat er al jaren een waarschuwing is om de functie niet te gebruiken mysql_connect () om links tot stand te brengen Databases, lijken veel ontwikkelaars de grote fout die ze maken bij het gebruik ervan niet te beseffen.
PHP heeft native ondersteuning voor een groot aantal engines Databases die op de markt bestaan, maar de integratie ervan met MySQL het is bijna een verplicht startpunt voor de meeste gebruikers.
mysql_connect ()Vanaf versie 5.5 van PHP klassieke functie mysql_connect () is in staat verouderd, dat wil zeggen, het is verouderd en het wordt sterk aanbevolen om het niet te gebruiken omdat het niet zal worden opgenomen in toekomstige versies van de taal.
Het alternatief om de verbinding te maken gaat via twee elementen, de eerste is om dezelfde taalstructuur te gebruiken om verbindingen te maken of om de nieuwe bibliotheek te gebruiken om verbinding mee te maken MySQL. Hier komt misschien de eerste vraag, waarom denk je er gewoon aan? MySQL? Welnu, het antwoord is simpel, het is een begin, het is het eenvoudigste en nuttigste dat we in eerste instantie kunnen uitleggen, als we deze basis kennen, kunnen we extrapoleren naar andere motoren en stuurprogramma's.
Het eerste alternatief voor verbinding met Database is om het eigen data-object van de taal te gebruiken, genaamd PHP-gegevensobject of de afkorting ervan BOB. Dit is niets meer dan een grote geschreven extensie in de taal C waarmee we verbindingen tot stand kunnen brengen met verschillende soorten motoren Databases en dat het standaardmethoden heeft die ons de mogelijkheid geven om platformonafhankelijke applicaties te schrijven, dat wil zeggen dat we de syntaxis niet hoeven te veranderen als we de database-engine veranderen.
In eerste instantie zeiden we dat we ons zouden concentreren op MySQL, maar als we een verbinding tot stand brengen via BOB wat we doen, kunnen we toepassen op andere motoren. Hiervoor hoeven we alleen de stuurprogramma's voor genoemde motoren te activeren of op te nemen en ze in het bestand te activeren php.ini van de server.
Om verbinding te maken met een Database we moeten alleen de link tot stand brengen met behulp van de juiste methode ervoor, in BOB de verbinding wordt tot stand gebracht met drie basisparameters, de naam van de databaseserver, de gebruikersnaam en het wachtwoord.
De enige parameter van deze drie die uitleg behoeft, is die van de databaseserver, in het verleden moesten we de . selecteren Database Via een specifieke functie na het tot stand brengen van de verbinding, in dit geval zullen we het in dezelfde string doen, dus onze servernaamstring zou er als volgt uitzien:
mysql: host = hostnaam; dbnaam = dbnaam

We zien dat we in eerste instantie de motor specificeren, in dit geval mysql dan gaan we je met host vertellen wat de server is, hier kan het een zijn IK P of localhost als de server lokaal is, tot slot met dbnaam we geven de naam door van de database waarmee we verbinding willen maken. We gaan in de volgende afbeelding bekijken hoe een code verbinding moet maken met: BOB:

VERGROTEN

Omdat we de eerste stap kennen om verbinding te maken, moeten we nu leren hoe we query's kunnen uitvoeren, normaal gesproken voerden we in het verleden de query met zijn parameters direct uit, deze praktijk is helemaal niet veilig omdat het ons vatbaar maakt voor aanvallen van het type SQL injectie, BOB stelt ons in staat om de zogenaamde Voorbereide verklaringen wat niets meer is dan het uitvoeren van de query op een geparametriseerde manier, dus de bibliotheek doet zelf een foutopsporingstaak en is minder vatbaar voor aanvallen. Laten we hierna kijken hoe we een eenvoudige query uitvoeren en vervolgens het equivalent daarvan met Voorbereide verklaring.
In deze eenvoudige query gaan we ervan uit dat we een tabel in onze hebben Database telefoongesprek Auteur die een auteurscode ontvangt en vervolgens de naam, natuurlijk om demonstratief te zijn, het is geen voorbeeld van een goede tabel, we zijn alleen geïnteresseerd in hoe de verbinding werkt van BOB.
In de afbeelding zien we dat we een methode noemen genaamd vraag () van het object gemaakt met de PDO-verbindingsreeks, dan schrijven we onze vraag zonder veel probleem:

VERGROTEN

Het probleem is dat we de waarden direct ontvangen, dus er is geen manier om dit te verbeteren en opnieuw te gebruiken, in plaats daarvan als we een Voorbereide verklaring, zullen we zien dat we eerst aangeven welke query moet worden uitgevoerd, vervolgens met een andere methode maken we deze effectief en geven we de benodigde waarden eraan door. Dit brengt de parameter debugging engine in het spel. BOB waardoor een extra beschermingsniveau wordt geboden. Laten we in de volgende afbeelding zien hoe het vorige voorbeeld eruit zou zien met Voorbereide verklaringen nu.

VERGROTEN

Op het eerste gezicht lijkt het misschien wat ingewikkeld en niet optimaal, maar als we analyseren, zien we dat we eerst de uit te voeren query vaststellen, dan maken we een array met de parameters die onze query zal ontvangen, in het geval van het voorbeeld dat we ontvang de code van de auteur en zijn naam, ten slotte voeren we de query uit en geven deze de reeks parameters door.
Als we een keer willen overleggen, hebben we al enkele waarden in onze Database het is heel eenvoudig, we hoeven het alleen maar te doen met een vraag KIES, dit zal ons in staat stellen om de records te brengen, in het verleden waren we afhankelijk van functies zoals: mysql_fetch_array () of mysql_fetch_assoc () die eenmaal verbruikt, zorgde ervoor dat we de resultaten niet meer konden beheren.
Met BOB We gaan de gegevens rechtstreeks van het object verkrijgen, dus we zullen het altijd beschikbaar hebben tijdens de uitvoering, laten we in het volgende voorbeeld zien hoe het zou worden gedaan:

We zien hoe we in eerste instantie een Voorbereide verklaring, we doen in dit geval een eenvoudige query en dan met een lus terwijl () we zullen elk van de records verkrijgen en deze afdrukken, als we merken dat we niet verwijzen naar: MySQL ergens in onze code, dus als we de verbindingsreeks wijzigen en een andere engine gebruiken met een tabel en a Database met dezelfde naam en structuur, kunnen we uw gegevens verkrijgen zonder onze code te hoeven wijzigen.
Wat MySQL is de meest populaire database-engine om mee te integreren PHP, er is ook een alternatief en dat is MySQLi wat niets meer is dan een objectgeoriënteerde interface. De manier van werken lijkt sterk op die van BOBWat echter verandert, is dat het alleen voor deze populaire database-engine is, dus een cross-platform conversie zou niet mogelijk zijn.
De verbindingsreeks is iets minder complex omdat het de naam van de server in de host en de te gebruiken database verdeelt in twee verschillende parameters, naast de naam en het wachtwoord van de gebruiker, laten we eens kijken hoe het eruit ziet:
$ objConex = nieuwe mysqli (HostName, gebruiker, wachtwoord, DatabaseName);

Laten we in het volgende voorbeeld zien hoe we een verbinding tot stand brengen met MySQLi en hoe we een eenvoudige gegevensinvoeging kunnen uitvoeren:

VERGROTEN

We merken op dat er een overeenkomst is met BOB door een methode te hebben vraag () ook, maar dit werkt alleen voor MySQL.
Nu gaan we de gegevens ontvangen en herhalen die we uit een query kunnen halen, hiervoor gaan we dezelfde methode gebruiken vraag () en dan de methode fetch_assoc () om de resultaten te krijgen:

Het meest interessante dat ons is opgevallen, is dat we de methode gebruiken dichtbij (), dit wat het doet is de huidige verbinding sluiten en de buffer op een zodanige manier opschonen dat het gebruik van serverbronnen wordt geoptimaliseerd.
BelangrijkWe moeten in gedachten houden dat als we een systeem hebben gemaakt in een oude versie van PHP en we zullen niet migreren naar nieuwe versies, misschien de verbindingsreeksen wijzigen in Database en querymethoden zijn misschien geen goed idee voor het werk dat het vertegenwoordigt. Als we echter nieuwe applicaties en systemen willen maken, kunnen we het beste beginnen met een solide basis met behulp van deze nieuwe bibliotheken met ondersteuning in toekomstige versies van PHP.
Hiermee ronden we deze tutorial af, we hebben gezien dat de nieuwe alternatieven veel schoner en veiliger zijn, en hun gebruiksgemak maakt ze geschikt voor de huidige tijd.Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven
wave wave wave wave wave