Réponse modifiée.
Après avoir acquis une certaine expérience avec ces deux API, je dirais qu'il existe 2 fonctionnalités de niveau de blocage qui rendent mysqli inutilisable avec les instructions préparées en natif.
Ils ont déjà été mentionnés dans 2 excellentes réponses (encore largement sous-estimées):
- Liaison de valeurs à un nombre arbitraire d'espaces réservés
- Renvoyer des données sous forme de simple tableau
(tous deux également mentionnés dans cette réponse )
Pour une raison quelconque, mysqli a échoué avec les deux.
De nos jours, il a été amélioré pour le second ( get_result ), mais il ne fonctionne que sur les installations mysqlnd, ce qui signifie que vous ne pouvez pas compter sur cette fonction dans vos scripts.
Pourtant, il n'a pas de lien par valeur, même à ce jour.
Donc, il n'y a qu'un seul choix: AOP
Toutes les autres raisons, telles que
- espaces réservés nommés (ce sucre de syntaxe est largement surévalué)
- prise en charge de différentes bases de données (personne ne l'a jamais utilisée)
- aller chercher dans l'objet (juste du sucre de syntaxe inutile)
- différence de vitesse (il n'y en a pas)
ne sont pas d'une importance significative.
En même temps, ces deux API manquent de fonctionnalités vraiment importantes , comme
- identificateur d'espace réservé
- espace réservé pour les types de données complexes pour rendre la liaison dynamique moins pénible
- code d'application plus court.
Ainsi, pour couvrir les besoins réels , il faut créer sa propre bibliothèque d'abstraction, basée sur l'une de ces API, en mettant en œuvre des espaces réservés analysés manuellement. Dans ce cas, je préférerais mysqli, car il a un niveau d'abstraction moindre.