Maison >développement back-end >tutoriel php >002 - Différences et choix entre PDO et MySQLi
Lorsque vous utilisez PHP pour accéder à la base de données, en plus du pilote de base de données fourni avec PHP, nous avons généralement deux meilleures options : PDO et MySQLi. . Dans le processus de développement proprement dit, pour décider lequel choisir, vous devez d’abord avoir une compréhension relativement complète des deux. Cet article analyse leurs différences et compare la prise en charge, la stabilité, les performances de plusieurs types de bases de données, etc.
|
AOP strong> | MySQLi | |||||||||||||||||||||||||||
Prise en charge des bases de données | 12 pilotes différents | MySQL uniquement | |||||||||||||||||||||||||||
API | POO | POO + procédural | |||||||||||||||||||||||||||
Connexion | Facile | Facile | tr>|||||||||||||||||||||||||||
Paramètres nommés | Oui | Non | |||||||||||||||||||||||||||
Mappage d'objets | Oui | Oui | |||||||||||||||||||||||||||
Relevés préparés (côté client) strong> | Oui | Non | |||||||||||||||||||||||||||
Performances | Rapide td> | Rapide | |||||||||||||||||||||||||||
Procédures stockées | Oui | Oui |
// PDO$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); // mysqli, procedural way$mysqli = mysqli_connect('localhost','username','password','database'); // mysqli, object oriented way$mysqli = new mysqli('localhost','username','password','database');
PDO et MySQLi fournissent tous deux une API sous une forme orientée objet, mais MySQLi fournit également une API orientée processus. plus facile à comprendre pour les débutants. Si vous connaissez le pilote PHP mysql natif, vous constaterez qu'il est facile d'utiliser l'interface MySQLi pour remplacer l'accès aux données d'origine. L'avantage d'utiliser PDO est que PDO prend en charge plusieurs bases de données, tandis que MySQLi ne prend en charge que MySQL. Une fois que vous le maîtrisez, vous pouvez utiliser et connecter plusieurs bases de données à votre guise.
Le plus grand avantage de PDO par rapport à MySQLi est que PDO prend en charge de nombreux types de bases de données, tandis que MySQLi ne prend en charge que MySQLi. Pour voir quelles bases de données PDO prend en charge, utilisez le code suivant :
var_dump(PDO::getAvailableDrivers());
Quels sont les avantages de la prise en charge de plusieurs bases de données ? Lorsque votre programme souhaite passer de MySQL à SQL Server ou Oracle à l'avenir, les avantages de PDO seront reflétés, car la modification de la base de données est transparente pour l'interface du programme et les modifications du code php sont très minimes si vous utilisez MySQLi. , alors tous les utilisateurs partout dans la base de données doivent être réécrits, je ne peux donc apporter que de telles modifications.
Paramètres nommés PDO et liaison des paramètres :
$params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600); $pdo->prepare(' SELECT * FROM users WHERE username = :username AND email = :email AND last_login > :last_login'); $pdo->execute($params);
Et liaison des paramètres MySQLi :
$query = $mysqli->prepare(' SELECT * FROM users WHERE username = ? AND email = ? AND last_login > ?'); $query->bind_param('sss', 'test', $mail, time() - 3600);$query->execute();
D'après la comparaison ci-dessus, nous pouvons voir que PDO lie les valeurs via des paramètres nommés, tandis que la liaison des paramètres MySQLi utilise le point marquez "?" et lie les valeurs strictement dans l'ordre de ce point d'interrogation. De cette façon, bien que le code semble moins long que le nom correspondant de PDO, un inconvénient est que la lisibilité et la maintenabilité sont réduites lorsque le nombre de paramètres est relativement petit, cela n'est pas perceptible lorsque le nombre de paramètres augmente au-delà de. 10 Le cas d'un ou plusieurs est plus pénible. Il faut attribuer les valeurs une à une dans l'ordre des points d'interrogation. Si l'une d'elles est fausse, les suivantes le seront.
Malheureusement, MySQLi ne prend pas en charge la liaison de paramètres nommés comme PDO.
Le développement basé sur une base de données lit généralement les données de la base de données, puis utilise un objet pour transporter les données. PDO et MySQLi prennent en charge le mappage d'objets. Supposons qu'il existe une classe User qui possède certaines propriétés correspondant à la base de données. Sinon, pour le mappage d'objets, nous devons attribuer des valeurs aux champs un par un après avoir lu les données, ce qui est très fastidieux.
Veuillez consulter le code des deux objets ci-dessous :
class User { public $id; public $first_name; public $last_name; public function info() { return '#'.$this->id.': '.$this->first_name.' '.$this->last_name; } }
6. Sécurité
$query = "SELECT id, first_name, last_name FROM users"; // PDO$result = $pdo->query($query);$result->setFetchMode(PDO::FETCH_CLASS, 'User'); while ($user = $result->fetch()) { echo $user->info()."\n"; }// MySQLI, procedural wayif ($result = mysqli_query($mysqli, $query)) { while ($user = mysqli_fetch_object($result, 'User')) { echo $user->info()."\n"; } }// MySQLi, object oriented wayif ($result = $mysqli->query($query)) { while ($user = $result->fetch_object('User')) { echo $user->info()."\n"; } }
$_GET['username'] = "'; DELETE FROM users; /*"
6.2. Liaison des paramètres d'instruction préparée
// PDO, "manual" escaping$username = PDO::quote($_GET['username']); $pdo->query("SELECT * FROM users WHERE username = $username"); // mysqli, "manual" escaping$username = mysqli_real_escape_string($_GET['username']); $mysqli->query("SELECT * FROM users WHERE username = '$username'");
Étant donné que PDO peut prendre en charge d'autres bases de données non MySQL et que MySQLi est spécialement conçu pour MySQL, les performances de MySQLi sont légèrement meilleures que celles de PDO. Cependant, PDO et MySQLi ne sont toujours pas aussi rapides que l'extension MySQL native de PHP. Mais ce type de comparaison de performances ne veut pas dire grand-chose, car ils sont tous assez rapides. Si les exigences de performances de votre programme ne sont pas particulièrement exigeantes, les trois peuvent vous satisfaire. Quant à savoir lequel vous souhaitez choisir, vous devez le peser en fonction de votre situation pratique.
PDO prend en charge 12 types de pilotes de base de données et la liaison de paramètres nommés est son plus grand avantage. Grâce à la comparaison ci-dessus, je pense que vous savez également ce que vous utiliserez dans votre propre projet. on est connecté à la base de données ?
Recommandations associées :
001 - Analyse détaillée de l'utilisation des AOP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!