Référence MYSQLI :http://php.net/manual/en/mysqli.query. php
Référence AOP :http://php.net/manual/en/book.pdo. php
La plupart des programmeurs PHP ont découvert comment utiliser les extensions MySQLi et MySQL. Cependant, les objets de données PHP (PDO) offrent des moyens de travailler avec des objets et de récupérer des instructions préparées, ce qui facilite grandement le travail.
PDO est un outil d'accès aux bases de données en PHP qui permet un accès uniforme sur plusieurs bases de données. Il ne prend pas en charge la syntaxe spécifique aux bases de données, mais il permet une commutation relativement transparente entre différentes plates-formes et bases de données, ce qui peut simplement être fait en modifiant la chaîne de connexion.
Vous trouverez ci-dessous quelques informations sur PDO, principalement destinées aux programmeurs qui utilisent encore les extensions MySQL et MySQLi, soulignant la supériorité des premiers. Différents aspects seront étudiés dans les prochains paragraphes.
- Support de base de données
L'extension PDO a la capacité d'accéder à n'importe quelle base de données pour laquelle le pilote PDO a été écrit. Il existe de nombreux pilotes PDO disponibles, dont quelques-uns incluent des pilotes PDO destinés à accéder aux bases de données Free TDS, Sybase, Microsoft SQL Server, IBM DB2, Firebird/Interbase 6, Oracle Call Interface et PostgreSQL, parmi bien d'autres.
Les pilotes ne sont pas automatiquement disponibles sur tous les systèmes, vous devrez donc trouver vos pilotes disponibles et ajouter ceux dont vous avez besoin.
- Connexion à la base de données
Il existe différentes syntaxes pour établir des connexions de base de données qui dépendent de bases de données spécifiques. Lorsque vous utilisez PDO, vous voulez vous assurer que vos opérations sont enveloppées dans des blocs try/catch et que vous utilisez la technique d'exception.
Dans des cas normaux, une seule connexion doit être établie et les connexions sont fermées en programmant le descripteur de base de données comme une valeur nulle. Vous pouvez rechercher des options et des syntaxes plus spécifiques dans divers sites de ressources.
- Gestion des erreurs
PDO permet l'utilisation d'exceptions pour la gestion des erreurs, c'est pourquoi il est conseillé d'envelopper PDO dans des blocs try/catch. De cette façon, PDO peut être forcé dans l'attribut de mode d'erreur approprié afin de produire une exception.
Il existe trois modes – silencieux (par défaut), avertissement et exception. Les deux derniers sont plus utiles dans la programmation DRY. Le mode d'erreur "Avertissement" est utile pour le débogage et le mode "exception" permet une gestion élégante des erreurs tout en masquant les données qu'une personne pourrait utiliser pour exploiter votre système.
- Inserts et mises à jour
PDO condense les opérations courantes d'insertion et de mise à jour de la base de données en un processus simple en deux étapes :Prepare >> [Bind] >> Execute
. Avec cette méthode, vous pouvez tirer pleinement parti des instructions préparées de PDO, qui vous offrent une protection contre les attaques malveillantes par injection SQL.
Les instructions préparées sont des instructions SQL pré-compilées qui peuvent être exécutées plusieurs fois en envoyant ces données aux serveurs. Ils sont avantageux dans la mesure où les données utilisées dans les espaces réservés sont automatiquement protégées contre les attaques par injection SQL.
Code PDO pour vérifier si les champs nom d'utilisateur et mots de passe existent dans la BD :
<?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();
}
J'espère que cette référence pourra vous être utile pour développer vous-même les codes du futur projet.