Les API proposées par le PHP
Pour pouvoir manipuler nos bases de données MySQL en PHP (sans passer par phpMyAdmin), nous allons déjà devoir nous connecter à MySQL.
Pour cela, le PHP met à notre disposition deux API (Application Programming Interface) :
- L’extension MySQLi ;
- L’extension PDO (PHP Data Objects).
Note : Auparavant, nous pouvions également utiliser l’extension MySQL. Cependant, cette extension est désormais dépréciée et a été remplacée par MySQLi (« i » signifie « improved », c’est-à-dire « amélioré » en français).
Quelle API préférer : MySQLi ou PDO ?
Le PHP nous fournit donc deux API pour nous connecter à MySQL et manipuler nos bases de données.
Chacune de ces deux API possède des forces différentes et comme vous vous en doutez elles ne sont pas forcément interchangeables.
Il existe notamment une différence notable entre ces deux API : l’extension MySQLi ne va fonctionner qu’avec les bases de données MySQL tandis que PDO va fonctionner avec 12 systèmes de bases de données différents.
( quelques exemples : 4D ; CUBRID ;Firebird ;IBM DB2 (avec ou sans ODBC) ;Informix ;Microsoft SQL Server ; MySQL ;Oracle Database ;PostgreSQL ;SQLite. )
Pour cette raison, nous préférerons généralement le PDO car si vous devez un jour utiliser un autre système de bases de données, le changement sera beaucoup plus simple que si vous avez tout codé en MySQLi auquel cas vous devrez réécrire le code dans son ensemble.
En termes de fonctionnement, MySQLi et PDO sont tous les deux orienté objet (bien que MySQLi propose également une API en procédural), et ils supportent également tous les deux les requêtes préparées qui servent à se prémunir des injections SQL (nous reparlerons de cela dans la suite du cours).
MySQLi a remplacé MySQL
L’extension MySQL :
N’est pas en cours de développement actif.
Est officiellement [dépréciée][1] depuis PHP 5.5 (publié en juin 2013).
A été supprimée entièrement à partir de PHP 7.0 (sortie en décembre 2015).
Cela signifie qu’à partir du [31 décembre 2018][4], il n’existe plus dans aucune version de PHP prise en charge. Si vous utilisez une version de PHP qui le prend en charge, vous utilisez une version qui ne bénéficie pas de la correction des problèmes de sécurité.
Manque une interface OO
Ne supporte pas :
Les requêtes non bloquantes et asynchrones
Les [Instructions préparées][2] ou les requêtes paramétrées.
Les procédures stockées
Les déclarations multiples
Transactions
La « nouvelle » méthode d’authentification par mot de passe (activée par défaut dans MySQL 5.6 ; obligatoire dans 5.7).
Toutes les nouvelles fonctionnalités de MySQL 5.1 ou ultérieure.
Puisqu’il est déprécié, son utilisation rend votre code moins résistant à l’avenir.
L’absence de prise en charge des instructions préparées est particulièrement importante, car elles fournissent une méthode plus claire et moins sujette aux erreurs pour l’échappement et la citation des données externes que l’échappement manuel avec un appel de fonction séparé.