web-dev-qa-db-fra.com

MySQL vs MySQLi avec PHP

Quel est le meilleur, MySQL ou MySQLi? Et pourquoi? Que devrais-je utiliser?

Je veux dire mieux non seulement en termes de performances, mais de toute autre fonctionnalité pertinente.

163
anand.trex

Si vous jetez un oeil à Vue d'ensemble de l'extension améliorée de MySQL , il vous dira tout ce que vous devez savoir sur les différences entre les deux.

Les principales fonctionnalités utiles sont:

  • une interface orientée objet
  • soutien aux déclarations préparées
  • prise en charge de plusieurs déclarations
  • soutien aux transactions
  • capacités de débogage améliorées
  • support serveur intégré.
108
Mark Davidson

Il existe une page de manuel dédiée à aider à choisir entre mysql, mysqli et PDO à l'adresse

L'équipe PHP recommande mysqli ou PDO_MySQL pour les nouveaux développements:

Il est recommandé d'utiliser les extensions mysqli ou PDO_MySQL. Il n'est pas recommandé d'utiliser l'ancienne extension mysql pour un nouveau développement. Une matrice détaillée de comparaison des fonctionnalités est fournie ci-dessous. Les performances globales des trois extensions sont à peu près identiques. Bien que les performances de l’extension ne représentent qu’une fraction du temps d’exécution total d’une requête Web PHP. L'impact est souvent aussi faible que 0,1%.

La page comporte également une matrice de caractéristiques comparant les API d'extension. Les principales différences entre les API mysqli et mysql sont les suivantes:

                               mysqli     mysql
Development Status             Active     Maintenance only
Lifecycle                      Active     Long Term Deprecation Announced*
Recommended                    Yes        No
OOP API                        Yes        No
Asynchronous Queries           Yes        No
Server-Side Prep. Statements   Yes        No
Stored Procedures              Yes        No
Multiple Statements            Yes        No
Transactions                   Yes        No
MySQL 5.1+ functionality       Yes        No

* http://news.php.net/php.internals/53799

Il existe une matrice de fonctionnalités supplémentaire comparant les bibliothèques (new mysqlnd versus libmysql) à

et un article de blog très complet à

69
Gordon

J'ai abandonné l'utilisation de mysqli. C'est simplement trop instable. Des requêtes qui bloquaient PHP avec mysqli ont fonctionné, mais fonctionnent parfaitement avec le paquet mysql. Aussi mysqli se bloque sur les colonnes LONGTEXT . Ce bogue a été soulevé sous différentes formes depuis au moins 2005 et reste cassé . Honnêtement, j'aimerais utiliser des déclarations préparées, mais mysqli n'est tout simplement pas assez fiable (et personne ne semble se préoccuper de la réparer). Si vous voulez vraiment des déclarations préparées, utilisez PDO.

15
cletus

MySQLi signifie MySQL amélioré. C'est une interface orientée objet vers les liaisons MySQL qui facilite l'utilisation. Il offre également un support pour les instructions préparées (qui sont très utile). Si vous êtes sur PHP 5, utilisez MySQLi.

12
Ross

Ce qui est meilleur est le PDO; C'est une interface moins cruelle qui fournit les mêmes fonctionnalités que MySQLi.

L'utilisation d'instructions préparées est utile car elle élimine les possibilités d'injection SQL; L'utilisation d'instructions préparées côté serveur est une mauvaise solution car elle augmente le nombre d'allers-retours.

5
MarkR

pour moi, les déclarations préparées sont une fonctionnalité indispensable. plus exactement, la liaison de paramètres (qui ne fonctionne que sur les instructions préparées). c'est le seul moyen réellement sain d'insérer des chaînes dans des commandes SQL. Je ne fais vraiment pas confiance aux fonctions "d'échappement". la connexion à la base de données est un protocole binaire, pourquoi utiliser un sous-protocole limité aux paramètres ASCII?

3
Javier