MYSQLI-reference:http://php.net/manual/en/mysqli.query. php
PDO-reference:http://php.net/manual/en/book.pdo. php
De fleste PHP-programmører har opdaget, hvordan man bruger MySQLi og MySQL-udvidelser. PHP Data Objects (PDO) tilbyder dog måder at arbejde med objekter på og hente forberedte sætninger, som gør arbejdet meget lettere.
PDO er et databaseadgangsværktøj i PHP, som muliggør ensartet adgang på tværs af flere databaser. Den understøtter ikke syntaks, der er specifik for databaser, men den tillader relativt problemfri skift mellem forskellige platforme og databaser, hvilket ganske enkelt kan gøres ved at ændre forbindelsesstrengen.
Nedenfor er lidt information om PDO, hovedsageligt rettet mod programmører, der stadig bruger MySQL- og MySQLi-udvidelser, og skitserer førstnævntes overlegenhed. Forskellige aspekter vil blive studeret i de næste par afsnit.
- Databaseunderstøttelse
PDO-udvidelsen har mulighed for at få adgang til enhver database, som PDO-driveren er skrevet til. Der er mange PDO-drivere tilgængelige, hvoraf nogle få inkluderer PDO-drivere beregnet til at få adgang til gratis TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird/Interbase 6, Oracle Call Interface og PostgreSQL-databaser, blandt mange flere.
Driverne er ikke automatisk tilgængelige i alle systemer, så du bliver nødt til at finde dine tilgængelige drivere og tilføje dem, du har brug for.
- Databaseforbindelse
Der er forskellige syntakser til at etablere databaseforbindelser, som afhænger af specifikke databaser. Når du bruger PDO, vil du sikre dig, at dine operationer er pakket ind i try/catch-blokke, og at du bruger undtagelsesteknikken.
I normale tilfælde skal der kun oprettes en enkelt forbindelse, og forbindelser lukkes ved at programmere databasehåndtaget som et null. Du kan slå mere specifikke muligheder og syntaks op på forskellige ressourcewebsteder.
- Fejlhåndtering
PDO giver mulighed for brug af undtagelser til fejlhåndtering, hvorfor du rådes til at indpakke PDO i try/catch-blokke. På denne måde kan PDO tvinges ind i den relevante fejltilstandsattribut for at producere en undtagelse.
Der er tre - lydløs (standard), advarsel og undtagelse - tilstande. De to sidstnævnte er mere nyttige i DRY-programmering. 'Advarsel'-fejltilstand er nyttig til fejlfinding, og 'undtagelse'-tilstanden tillader yndefuld fejlhåndtering, mens data skjules, som en person kan bruge til at udnytte dit system.
- Indsættelser og opdateringer
PDO kondenserer de almindelige indsættelses- og opdateringsdatabaseoperationer til en simpel to-trins proces:Prepare >> [Bind] >> Execute
. Med denne metode kan du drage fuld fordel af PDO's forberedte sætninger, som tilbyder dig beskyttelse mod ondsindede angreb gennem SQL-injektion.
Forberedte sætninger er forudopfyldte SQL-sætninger, som kan udføres flere gange ved at sende disse data til serverne. De er fordelagtige ved, at data, der bruges i pladsholderne, automatisk er beskyttet mod SQL-injektionsangreb.
PDO-kode for at kontrollere, om felterne brugernavn og adgangskoder findes i DB:
<?php
//Connections
try {
$handler = new PDO('mysql:host=localhost;dbname=s','root', '*');
$handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e){
exit($e->getMessage());
}
$name = $_POST['name'];
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$password1 = $_POST['passwordconf'];
$ip = $_SERVER['REMOTE_ADDR'];
//Verifcation
if (empty($name) || empty($username) || empty($email) || empty($password) || empty($password1)){
$error = "Complete all fields";
}
// Password match
if ($password != $password1){
$error = "Passwords do not match";
}
// Email validation
if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
$error = "Enter a Valid email";
}
// Password length
if (strlen($password) <= 6){
$error = "Choose a password longer then 6 character";
}
if(!isset($error)){
//no error
$sthandler = $handler->prepare("SELECT username FROM users WHERE username = :name");
$sthandler->bindParam(':name', $username);
$sthandler->execute();
if($sthandler->rowCount() > 0){
echo "User Already Exists.";
} else {
//Securly insert into database
$sql = 'INSERT INTO users (name ,username, email, password, ip) VALUES (:name,:username,:email,:password,:ip)';
$query = $handler->prepare($sql);
$query->execute(array(
':name' => $name,
':username' => $username,
':email' => $email,
':password' => $password,
':ip' => $ip
));
}
}else{
echo "error occured: ".$error;
exit();
}
Håber så denne reference kan være nyttig for dig til selv at udvikle koderne i det fremtidige projekt.