The text: "PDO does not allow you to use MySQL's support for Multiple Statements" is outdated.
Since v5.3, PHP intoduced multiple statement support into PDO (by PDO_MYSQLND driver replacing the previous PDO_MYSQL).
Cette section fournit des informations sur les solutions qui s'offrent à vous quand vous développez une application PHP qui a besoin de s'interfacer avec une base de données MySQL.
Qu'est-ce qu'une API?
Une Interface de programmation d'application, une
Application Programming Interface
, ou encore API,
définit les classes, méthodes, fonctions et variables dont votre
application va faire usage pour exécuter différentes tâches. Dans le cas
des applications PHP, les communications avec une base de données
se font généralement par une API qui est exposée dans une extension PHP.
Les API peuvent être procédurales ou orientées objet. Avec une API procédurale, vous pouvez appeler les fonctions pour exécuter des commandes; avec une API orientée objet, vous devez créer des objets et appeler les méthodes de ces objets. Des deux, c'est la dernière qui est généralement préférée, car elle est plus moderne et conduit à du code plus organisé.
Lors de l'écriture d'applications PHP qui doivent se connecter à MySQL, il y a plusieurs API disponibles. Ce document présente ces API, et vous donne les informations pour choisir la meilleure solution pour votre application.
Qu'est-ce qu'un connecteur?
Dans la documentation MySQL, le terme connector fait référence à un logiciel qui permet à une application de se connecter à une base de données MySQL. MySQL fournit des connecteurs pour toute une collection de langages, y compris PHP.
Si votre application PHP a besoin de communiquer avec un serveur de base de données, vous devez écrire du code pour pouvoir vous connecter, envoyer des requêtes au serveur, etc. Un logiciel est nécessaire pour assurer l'interface que PHP va utiliser et gérer les communications entre votre application et le serveur de base de données : éventuellement, des bibliothèques intermédiaires sont nécessaires. Ces logiciels sont appelés de manière générique des connecteurs, car ils permettent de se connecter à un serveur de base de données.
Qu'est-ce qu'un pilote ?
Un pilote est un logiciel qui est conçu pour communiquer avec
un type particulier de base de données. Un pilote peut aussi être
appelé une bibliothèque, telle que la
MySQL Client Library
ou le
MySQL Native Driver. Ces bibliothèques implémentent le protocole
de bas niveau pour communiquer avec un serveur MySQL.
Par exemple, la couche d'abstraction de base de données PHP Data Objects (PDO) utilise un ou plusieurs pilotes de base de données. Un de ces pilotes est le pilote PDO MYSQL, qui permet de faire l'interface avec MySQL.
Parfois, les développeurs utilisent les termes de connecteur et de pilote
de manière interchangeable, et cela peut être confus. Dans les
documentations MySQL, le terme de pilote
est réservé
aux logiciels qui sont la face spécifique avec la base de données du
paquet.
Qu'est-ce qu'une extension?
Dans la documentation PHP, vous rencontrerez un autre terme :
extension. Le code PHP est constitué d'un cœur,
avec des extensions optionnelles. Les extensions lié à MySQL de PHP,
telles que l'extension mysqli
et l'extension de pilote
PDO MySQL, sont implémentées en utilisant le framework d'extension PHP.
Une extension expose typiquement une API à un programmeur PHP, pour lui permettre de faciliter sa programmation. Cependant, certaines extensions qui utilisent le framework PHP n'exposent pas d'API au développeur PHP.
L'extension de pilote PDO MySQL, par exemple, n'expose pas d'API au pgrammeur PHP, mais fournit une interface à la couche PDO.
Les termes API et extension ne devraient pas signifier la même chose, car une extension PHP ne fournit pas d'API particulière au programmeur PHP.
Quelles sont les API PHP pour MySQL ?
Il y a deux API principales pour se connecter à MySQL :
L'extension mysqli
PHP Data Objects (PDO)
Chacune a ses avantages et ses inconvénients. Les sections suivantes tendent à vous donner une présentation rapide de chaque API.
Qu'est-ce que l'extension mysqli de PHP ?
L'extension mysqli
, ou, comme elle est parfois appelée,
l'extension MySQL améliorée (i pour improved
en anglais), a été développée pour tirer parti des nouvelles fonctionnalités
des systèmes MySQL version 4.1.3 et plus récent. L'extension
mysqli
est inclue dans PHP depuis les versions 5.
L'extension mysqli
a un grand nombre d'avantages
et d'améliorations par rapport à l'extension mysql
:
Interface orientée objet
Support des commandes préparées
Support des commandes multiples
Support des transactions
Capacités de déboguage avancées
En plus d'une interface orientée objet, l'extension propose aussi une interface procédurale.
L'extension mysqli
est compilée avec le framework
PHP, et son code source est rangé dans le dossier ext/mysqli.
Pour plus d'informations sur l'extension mysqli
,
voyez MySQLi.
Qu'est-ce que l'extension PDO de PHP ?
PHP Data Objects
, ou PDO, est une couche d'abstraction
de base de données, spécifique à PHP. PDO propose une API cohérente pour vos
applications PHP, indépendamment du type de base de données avec laquelle
vous travaillez. En théorie, si vous utilisez PDO, vous pouvez
changer de base de données, disons de Firebird à MySQL, et ne faire que
des changements mineurs à votre code PHP.
D'autres exemples de couches d'abstraction de base de données incluent JDBC pour Java et DBI pour Perl.
Si PDO a ses avantages, comme une API propre, simple et portable, ses inconvénients principaux sont qu'elle ne vous permet pas d'utiliser toutes les fonctionnalités avancées des dernières versions de MySQL. Par exemple, PDO ne vous permet pas de faire des requêtes multiples.
PDO est implémenté en utilisant le framework PHP, et son code source est rangé dans le dossier ext/pdo.
Pour plus d'informations sur PDO, voyez PDO.
Qu'est-ce que le pilote MySQL pour PDO ?
Le pilote PDO MYSQL n'est pas une API en tant que tel, au moins du point de vue du développeur PHP. En fait, le pilote PDO MYSQL fait partie de PDO, et fournit les fonctionnalités particulières à MySQL. Le programmeur appelle l'API PDO, mais PDO utilise le pilote PDO MYSQL pour assurer les communications avec MySQL.
Le pilote PDO MYSQL fait partie de la grande famille des pilotes PDO. Les autres pilotes disponibles assurent les communications avec Firebird et PostgreSQL, entre autres.
Le pilote PDO MYSQL est implémenté avec le framework d'extension de PHP. Son code source est situé dans le dossier ext/pdo_mysql. Il n'expose aucune API au programmeur PHP.
Pour plus de détails sur le pilote PDO de MySQL, voyez MySQL (PDO).
What is PHP's MySQL Native Driver?
Pour communiquer avec le serveur MySQL, lextension
mysqli
et le pilote
PDO MYSQL utilisent tous une bibliothèque bas niveau qui implémente
le protocole MySQL. Par le passé, la seule bibliothèque disponible
était la MySQL Client Library
,
aussi appelée libmysqlclient
.
Cependant, l'interface présentée par libmysqlclient
n'était
pas optimisée pour les communications avec PHP, et
libmysqlclient
était conçue à l'origine en C, pour des
applications de même type. Pour cette raison, le pilote MySQL natif
mysqlnd
a été développé comme une alternative à
libmysqlclient
pour les applications PHP.
L'extension mysqli
et le pilote MySQL natif peuvent
tout deux être configuré individuellement pour utiliser soit
libmysqlclient
soit mysqlnd
. Comme
mysqlnd
a été conçu spécifiquement pour utiliser le système
PHP, il propose de nombreux avantages et améliorations par rapport à
libmysqlclient
. Vous êtes vivement encouragés à en profiter.
Le MySQL Native Driver est implémenté sur la base du framework d'extension PHP. Le code source est dans ext/mysqlnd. Il n'expose aucune nouvelle API au programmeur PHP.
Comparaison des fonctionnalités
La table suivante compare les fonctionnalités des méthodes principales pour se connecter à MySQL depuis PHP :
Extension mysqli | PDO (avec le pilote PDO MySQL Driver et MySQL Native Driver) | |
---|---|---|
Version d'introduction en PHP | 5.0 | 5.0 |
Statut de développement MySQL | Développement actif | Développement actif |
L'API supporte les jeux de caractères | Oui | Oui |
L'API supporte les commandes préparées | Oui | Oui |
L'API supporte les commandes préparées coté client | Non | Oui |
L'API supporte les procédures stockées | Oui | Oui |
L'API supporte les commandes multiples | Oui | La plupart |
Toutes toutes les fonctionnalités MySQL 4.1 et plus récent | Oui | La plupart |
The text: "PDO does not allow you to use MySQL's support for Multiple Statements" is outdated.
Since v5.3, PHP intoduced multiple statement support into PDO (by PDO_MYSQLND driver replacing the previous PDO_MYSQL).
mysqli can be great in some circumstances but much work has been put into PHP Portable Data Objects (PDO) which you should also consider when choosing a way to connect to your database using php. For example, PDO supports MySQL with minimal performance hit and the code your write for it will support many other databases with little or no changes. That said, the database connection code, even if you have to change a lot of it to use another database will be much less work than coding your actual database data entry and report apps. When I started creating PHP/MySQL apps years ago, I used php's native support for PHP then moved to PEAR:DB and MDB/MDB2 and finally to wizzyweb which is basically like "phpMyAdmin for Apps" to create apps as it automatically generates the PHP PDO connection code and the application code. Sure, I could code it all from scratch but I save about 90% of the time it used to take. The point is look at the total amount of time you will save by using native code vs. an abstraction layer. Most people find that programmer time is the most valuable part of the equation so anything than can save programmer time should be heavily weighted.