Qu'est-ce qui est le mieux, MySQL ou MySQLi ? Et pourquoi ? Lequel dois-je utiliser ?
Je veux dire meilleur non seulement en termes de performances, mais aussi de toute autre caractéristique pertinente.
Qu'est-ce qui est le mieux, MySQL ou MySQLi ? Et pourquoi ? Lequel dois-je utiliser ?
Je veux dire meilleur non seulement en termes de performances, mais aussi de toute autre caractéristique pertinente.
Si vous jetez un coup d'œil à Aperçu de l'extension MySQL Improved il devrait vous dire tout ce que vous avez besoin de savoir sur les différences entre les deux.
Les principales caractéristiques utiles sont les suivantes :
Il convient également de noter que MySQLi ne fonctionne qu'avec MySQL 5+. Cela n'est plus vraiment pertinent aujourd'hui, mais lorsque MySQLi est sorti, MySQL 4 était encore la norme. C'est en partie la raison pour laquelle les extensions sont séparées, l'ancien pilote MySQL restant là pour des raisons de compatibilité.
Il convient de noter que les choses ont beaucoup changé en six ans. mysql_*()
est maintenant déprécié et seront supprimés bientôt. Vous ne devriez pas l'utiliser pour un nouveau code.
Il existe une page de manuel consacrée à l'aide au choix entre mysql, mysqli et PDO à l'adresse suivante
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 les nouveaux développements. Une matrice détaillée de comparaison des fonctionnalités est fournie ci-dessous. Les performances globales des trois extensions sont considérées comme étant à peu près les mêmes. Bien que les performances de l'extension ne contribuent qu'à une fraction du temps d'exécution total d'une requête web PHP. Souvent, l'impact est aussi faible que 0,1%.
La page contient également une matrice de fonctionnalités 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
* <a href="http://news.php.net/php.internals/53799" rel="noreferrer">http://news.php.net/php.internals/53799</a>
Il existe une matrice de fonctionnalités supplémentaires comparant les bibliothèques (new mysqlnd versus libmysql) à l'adresse suivante
et un article de blog très complet à
J'ai abandonné l'utilisation de mysqli. Il est tout simplement trop instable. J'ai des requêtes qui plantent PHP en utilisant mysqli mais qui fonctionnent très bien avec le paquet mysql. Voir aussi mysqli se plante sur les colonnes LONGTEXT . Ce bogue a été soulevé sous différentes formes depuis au moins 2005. et reste brisé . J'aimerais vraiment utiliser des instructions préparées mais mysqli n'est pas assez fiable (et personne ne semble se soucier de le corriger). Si vous voulez vraiment des instructions préparées, utilisez PDO.
PDO n'est pas exactement parfait non plus (j'ai rencontré quelques problèmes avec lui), mais il a au moins une base d'utilisateurs plus large, donc c'est probablement un pari plus sûr.
@Pacerier Considérant que c'est déprécié, je dirais non. En général, il semble que PDO soit devenu le choix standard.
Ce qui est mieux, c'est PDO ; c'est une interface moins crufty et fournit également les mêmes fonctionnalités que MySQLi.
L'utilisation d'instructions préparées est une bonne chose car elle élimine les possibilités d'injection SQL ; l'utilisation d'instructions préparées côté serveur est mauvaise car elle augmente le nombre d'allers-retours.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.