Bearbeitete Antwort.
Nachdem ich einige Erfahrung mit diesen beiden APIs habe, würde ich sagen, dass es 2 Blocking-Level-Funktionen gibt, die mysqli mit nativen vorbereiteten Anweisungen unbrauchbar machen.
Sie wurden bereits in 2 ausgezeichneten (und doch weit unterschätzten) Antworten erwähnt:
- Bindung von Werten an eine beliebige Anzahl von Platzhaltern
- Rückgabe von Daten als reines Array
(beide auch erwähnt in diese Antwort )
Aus irgendeinem Grund schlug mysqli bei beiden fehl.
Heute hat sich die Situation beim zweiten Mal etwas verbessert ( get_result ), aber sie funktioniert nur auf mysqlnd-Installationen, d.h. Sie können sich nicht auf diese Funktion in Ihren Skripten verlassen.
Dennoch hat sie bis heute keinen bindenden Wert.
Es gibt also nur eine Möglichkeit: PDO
Alle anderen Gründe, wie zum Beispiel
- benannte Platzhalter (dieser Syntaxzucker wird weit überschätzt)
- Unterstützung verschiedener Datenbanken (niemand hat sie je benutzt)
- fetch into object (nur unnützer Syntaxzucker)
- Geschwindigkeitsunterschied (es gibt keinen)
sind nicht von großer Bedeutung.
Gleichzeitig mangelt es diesen beiden APIs an einigen wirklich wichtige Merkmale , wie
- Platzhalter für Bezeichner
- Platzhalter für die komplexen Datentypen, um die dynamische Bindung weniger mühsam zu gestalten
- kürzerer Anwendungscode.
Also, um die real Leben braucht, muss man seine eigene Abstraktionsbibliothek erstellen, die auf einer dieser APIs basiert und manuell geparste Platzhalter implementiert. In diesem Fall würde ich mysqli bevorzugen, denn es hat eine geringere Abstraktionsebene.