MYSQLI Referens:http://php.net/manual/en/mysqli.query. php
PDO-referens:http://php.net/manual/en/book.pdo. php
De flesta PHP-programmerare har upptäckt hur man använder MySQLi och MySQL-tillägg. Men PHP Data Objects (PDO) erbjuder sätt att arbeta med objekt och hämta förberedda satser som gör arbetet mycket enklare.
PDO är ett databasåtkomstverktyg i PHP som möjliggör enhetlig åtkomst över flera databaser. Den stöder inte syntaxspecifika för databaser, men den tillåter relativt sömlös växling mellan olika plattformar och databaser, vilket helt enkelt kan göras genom att ändra anslutningssträngen.
Nedan finns lite information om PDO, främst riktad till programmerare som fortfarande använder MySQL- och MySQLi-tillägg, som beskriver överlägsenheten hos de förstnämnda. Olika aspekter kommer att studeras i de kommande styckena.
- Databasstöd
PDO-tillägget har förmågan att komma åt vilken databas som helst som PDO-drivrutinen har skrivits för. Det finns många PDO-drivrutiner tillgängliga, av vilka några inkluderar PDO-drivrutiner som är avsedda att få åtkomst till gratis TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird/Interbase 6, Oracle Call Interface och PostgreSQL-databaser, bland många fler.
Drivrutinerna är inte automatiskt tillgängliga i alla system, så du måste hitta dina tillgängliga drivrutiner och lägga till de du behöver.
- Databasansluter
Det finns olika syntaxer för att upprätta databasanslutningar som beror på specifika databaser. När du använder PDO vill du försäkra dig om att din verksamhet är inlindad i försök/fånga-block och att du använder undantagstekniken.
I normala fall behöver endast en enda anslutning göras och anslutningar stängs genom att programmera databashandtaget som en null. Du kan slå upp mer specifika alternativ och syntaxer på olika resurssajter.
- Felhantering
PDO tillåter användning av undantag för felhantering, varför du rekommenderas att linda in PDO i försök/fångstblock. På så sätt kan PDO tvingas in i det relevanta fellägesattributet för att skapa ett undantag.
Det finns tre lägen – tyst (standard), varning och undantag. De två sistnämnda är mer användbara i DRY-programmering. Felläget "Varning" är användbart för felsökning och "undantag"-läget tillåter elegant felhantering samtidigt som data döljs som en person kan använda för att utnyttja ditt system.
- Infogningar och uppdateringar
PDO kondenserar de vanliga databasoperationerna för att infoga och uppdatera till en enkel tvåstegsprocess:Prepare >> [Bind] >> Execute
. Med den här metoden kan du dra full nytta av PDO:s förberedda uttalanden, som erbjuder dig skydd mot skadliga attacker genom SQL-injektion.
Förberedda satser är föruppfyllda SQL-satser som kan köras flera gånger genom att skicka dessa data till servrarna. De är fördelaktiga eftersom data som används inom platshållarna automatiskt skyddas från SQL-injektionsattacker.
PDO-kod för att kontrollera om fälten för användarnamn och lösenord finns 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();
}
Hoppas att denna referens kan vara användbar för dig att utveckla koderna i det framtida projektet på egen hand.