Quelle est la différence entre MySQL, MySQLi et PDO? [fermé]


128

Quelle est la différence entre MySQL, MySQLi et PDO ?

Lequel est le mieux adapté à une utilisation avec PHP-MySQL?

Réponses:


100

Il existe (plus de) trois façons populaires d'utiliser MySQL à partir de PHP. Ceci décrit certaines fonctionnalités / différences PHP: Choisir une API :

  1. ( DEPRECATED ) Les fonctions mysql sont procédurales et utilisent l'échappement manuel.
  2. MySQLi remplace les fonctions mysql, avec des versions orientées objet et procédurales. Il prend en charge les déclarations préparées.
  3. PDO (PHP Data Objects) est une couche d'abstraction de base de données générale prenant en charge MySQL parmi de nombreuses autres bases de données. Il fournit des instructions préparées et une flexibilité significative dans la manière dont les données sont renvoyées.

Je recommanderais d'utiliser PDO avec des déclarations préparées. C'est une API bien conçue et vous permettra de passer plus facilement à une autre base de données (y compris celle qui prend en charge ODBC ) si nécessaire.


9
Il y a souvent la confusion que pour la procédure, vous devez utiliser les fonctions mysql _ * () alors que pour OO vous utilisez mysqli! Le fait est que mysqli remplace complètement l'implémentation précoce (PHP 4) de mysql. Il est possible d'utiliser à la fois le style procédural et le style OO avec mysqli.
Patrick Allaert

@Patrick, merci. J'ai corrigé cela.
Matthew Flaschen

46

Ce sont des API différentes pour accéder à un backend MySQL

  • Le mysql est l'API historique
  • Le mysqli est une nouvelle version de l'API historique. Il devrait fonctionner mieux et avoir un meilleur ensemble de fonctions. En outre, l'API est orientée objet.
  • PDO_MySQL , est le MySQL pour PDO. PDO a été introduit en PHP, et le projet vise à créer une API commune pour tous les accès aux bases de données, donc en théorie, vous devriez pouvoir migrer entre RDMS sans changer de code (si vous n'utilisez pas de fonction RDBM spécifique dans vos requêtes ), également orienté objet.

Cela dépend donc du type de code que vous souhaitez produire. Si vous préférez des calques orientés objet ou des fonctions simples ...

Mon conseil serait

  1. AOP
  2. MySQLi
  3. mysql

Je pense également que l'API mysql serait probablement supprimée dans les futures versions de PHP.


3
Ce n'est plus un sentiment: PHP7 a supprimé l'API mysql, laissant PDO et mysqli
Manuel

3

mysqli est la version améliorée de mysql.

L'extension PDO définit une interface légère et cohérente pour accéder aux bases de données en PHP. Chaque pilote de base de données qui implémente l'interface PDO peut exposer des fonctionnalités spécifiques à la base de données en tant que fonctions d'extension normales.


4
la copie à partir du fichier manuel n'est pas très utile.
XuDing

3

Plus précisément, l'extension MySQLi offre les avantages extrêmement utiles suivants par rapport à l'ancienne extension MySQL.

Interface POO (en plus de la procédure) Prise en charge de la déclaration préparée Transaction + Prise en charge des procédures stockées Améliorations de la vitesse de la syntaxe Améliorations du débogage amélioré

Extension PDO

L'extension PHP Data Objects est une couche d'abstraction de base de données. Plus précisément, ce n'est pas une interface MySQL, car elle fournit des pilotes pour de nombreux moteurs de base de données (y compris bien sûr MYSQL).

PDO vise à fournir une API cohérente, ce qui signifie que lorsqu'un moteur de base de données est modifié, les modifications de code pour refléter cela doivent être minimes. Lorsque vous utilisez PDO, votre code ne fonctionnera normalement que sur de nombreux moteurs de base de données, simplement en changeant le pilote que vous utilisez.

En plus d'être compatible entre les bases de données, PDO prend également en charge les instructions préparées, les procédures stockées et plus encore, tout en utilisant le pilote MySQL.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.