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.
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:
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 à
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.
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.
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.
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?