MySQL vs MySQLi bei Verwendung von PHP [geschlossen]


167

Was ist besser, MySQL oder MySQLi? Und warum? Welches soll ich verwenden?

Ich meine besser, nicht nur in Bezug auf die Leistung, sondern auch in Bezug auf andere relevante Funktionen.

Antworten:


111

Wenn Sie sich MySQL Improved Extension Overview ansehen , finden Sie hier alles, was Sie über die Unterschiede zwischen den beiden wissen müssen.

Die wichtigsten nützlichen Funktionen sind:

  • eine objektorientierte Schnittstelle
  • Unterstützung für vorbereitete Aussagen
  • Unterstützung für mehrere Anweisungen
  • Unterstützung für Transaktionen
  • erweiterte Debugging-Funktionen
  • Unterstützung für eingebettete Server.

1
Ja, das Beste ist, dass Mysqli vorbereitete Aussagen unterstützt
Jondinham

7
Es sollte auch beachtet werden, dass MySQLi nur mit MySQL 5+ funktioniert. Dies ist nicht mehr wirklich relevant, aber als MySQLi herauskam, war MySQL 4 immer noch der Standard. Dies ist Teil des Grundes, warum die Erweiterungen separat sind und der alte MySQL-Treiber aus Kompatibilitätsgründen dort bleibt.
Zneak

6
Es ist erwähnenswert, dass sich die Dinge in sechs Jahren sehr verändert haben. mysql_*()ist jetzt veraltet und wird bald entfernt . Sie sollten es nicht für neuen Code verwenden.

Welches sollten wir mit weniger CPU und RAM wählen?
Mahdi Jazini

1
Siehe Gordons Antwort unten. Die alte MySQL-Erweiterung wird nicht mehr unterstützt, daher sollten Sie die MySQL-Erweiterung sowieso besser verwenden.
Mark Davidson

70

Es gibt eine Handbuchseite, die Ihnen bei der Auswahl zwischen MySQL, MySQL und PDO hilft

Das PHP-Team empfiehlt mysqli oder PDO_MySQL für die Neuentwicklung:

Es wird empfohlen, entweder die Erweiterungen mysqli oder PDO_MySQL zu verwenden. Es wird nicht empfohlen, die alte MySQL-Erweiterung für neue Entwicklungen zu verwenden. Eine detaillierte Merkmalsvergleichsmatrix finden Sie unten. Die Gesamtleistung aller drei Erweiterungen wird als ungefähr gleich angesehen. Obwohl die Leistung der Erweiterung nur einen Bruchteil der Gesamtlaufzeit einer PHP-Webanforderung ausmacht. Oft beträgt die Auswirkung nur 0,1%.

Die Seite enthält auch eine Funktionsmatrix, in der die Erweiterungs-APIs verglichen werden. Die Hauptunterschiede zwischen mysqli und mysql API sind folgende:

                               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

Es gibt eine zusätzliche Feature-Matrix, in der die Bibliotheken (new mysqlnd versus libmysql) unter verglichen werden

und ein sehr gründlicher Blogartikel bei


15

Ich habe die Verwendung von mysqli aufgegeben. Es ist einfach zu instabil. Ich hatte Abfragen, die PHP mit mysqli zum Absturz brachten, aber mit dem mysql-Paket einwandfrei funktionieren. Auch mysqli stürzt in LONGTEXT-Spalten ab . Dieser Fehler wurde seit mindestens 2005 in verschiedenen Formen gemeldet und ist weiterhin behoben . Ich würde ehrlich gesagt gerne vorbereitete Anweisungen verwenden, aber mysqli ist einfach nicht zuverlässig genug (und niemand scheint sich die Mühe zu machen, es zu reparieren). Wenn Sie wirklich vorbereitete Anweisungen wünschen, gehen Sie mit PDO.


2
PDO ist auch nicht gerade perfekt (ich bin damit auf einige böse Coredumps gestoßen), aber zumindest hat es eine breitere Nutzerbasis, also ist es wahrscheinlich eine sicherere Wette.
Troelskn

@troelskn, ist normales MySQL nicht einfach besser?
Pacerier

@ Pacerier In Anbetracht dessen, dass es veraltet ist, würde ich nein sagen. Im Allgemeinen scheint PDO zur Standardwahl geworden zu sein.
Troelskn

@troelskn, aber veraltet bedeutet nichts, außer dass es in zukünftigen Versionen nicht mehr vorhanden sein würde. Ist normales MySQL in Bezug auf die Stabilität nicht stabiler?
Pacerier

1
Zu diesem Zeitpunkt (5.5) gibt PHP aktiv Warnungen aus, wenn Sie es verwenden: php.net/manual/en/migration55.deprecated.php
troelskn

13

MySQLi steht für MySQL verbessert. Es ist eine objektorientierte Schnittstelle zu den MySQL-Bindungen, die die Verwendung vereinfacht. Es bietet auch Unterstützung für vorbereitete Aussagen (die sehr nützlich sind). Wenn Sie mit PHP 5 arbeiten, verwenden Sie MySQLi.


5

Was ist besser ist PDO; Es ist eine weniger muffige Oberfläche und bietet auch die gleichen Funktionen wie MySQLi.

Die Verwendung vorbereiteter Anweisungen ist gut, da dadurch SQL-Injection-Möglichkeiten ausgeschlossen werden. Die Verwendung serverseitig vorbereiteter Anweisungen ist schlecht, da dadurch die Anzahl der Roundtrips erhöht wird.


3

Vorbereitete Aussagen sind für mich ein Muss. genauer gesagt, Parameterbindung (die nur bei vorbereiteten Anweisungen funktioniert). Dies ist die einzig wirklich vernünftige Möglichkeit, Zeichenfolgen in SQL-Befehle einzufügen. Ich vertraue den "Flucht" -Funktionen wirklich nicht. Die DB-Verbindung ist ein Binärprotokoll. Warum sollte ein ASCII-begrenztes Unterprotokoll für Parameter verwendet werden?


1
PDO verwendet normalerweise clientseitig vorbereitete Anweisungen, sodass sie auf dem Server nicht wirklich vorbereitet sind. Dies ist jedoch gut, da Serverressourcen gespart werden und normalerweise eine bessere Leistung erzielt wird. Die vorbereitete Anweisung "Emulation" entgeht den Dingen immer korrekt.
MarkR

1
"immer" und "entkommen" sind gefährliche Wörter, wenn sie zusammen gehören. Ich weiß nicht, vielleicht ist dieser Code völlig fehlerfrei. aber warum sich die Mühe machen, wenn ein echtes Binärprotokoll verfügbar ist? Die Leistung ist offen für Benchmarking.
Javier
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.