Was ist der Unterschied zwischen MySQL, MySQLi und PDO? [geschlossen]


128

Was ist der Unterschied zwischen MySQL, MySQLi und PDO ?

Welches ist am besten für PHP-MySQL geeignet?

Antworten:


100

Es gibt (mehr als) drei beliebte Möglichkeiten, MySQL von PHP aus zu verwenden. Dies beschreibt einige Funktionen / Unterschiede PHP: Auswahl einer API :

  1. ( DEPRECATED ) Die MySQL-Funktionen sind prozedural und verwenden manuelles Escape .
  2. MySQLi ist ein Ersatz für die MySQL-Funktionen mit objektorientierten und prozeduralen Versionen. Es unterstützt vorbereitete Aussagen.
  3. PDO (PHP Data Objects) ist eine allgemeine Datenbankabstraktionsschicht, die neben vielen anderen Datenbanken auch MySQL unterstützt. Es bietet vorbereitete Anweisungen und erhebliche Flexibilität bei der Rückgabe von Daten.

Ich würde empfehlen, PDO mit vorbereiteten Anweisungen zu verwenden. Es ist eine gut gestaltete API, mit der Sie bei Bedarf einfacher zu einer anderen Datenbank (einschließlich einer Datenbank, die ODBC unterstützt ) wechseln können.


9
Es gibt oft die Verwirrung, dass Sie für prozedurale Funktionen mysql _ * () verwenden müssen, während Sie für OO mysqli verwenden! Tatsache ist, dass mysqli die frühe (PHP 4) Implementierung von mysql vollständig ersetzt. Es ist möglich, sowohl den prozeduralen Stil als auch den OO-Stil mit mysqli zu verwenden.
Patrick Allaert

@ Patrick, danke. Ich habe das korrigiert.
Matthew Flaschen

46

Dies sind verschiedene APIs für den Zugriff auf ein MySQL-Backend

  • Die MySQL ist die historische API
  • Das mysqli ist eine neue Version der historischen API. Es sollte eine bessere Leistung und einen besseren Funktionsumfang haben. Außerdem ist die API objektorientiert.
  • PDO_MySQL ist MySQL für PDO. PDO wurde in PHP eingeführt, und das Projekt zielt darauf ab, eine gemeinsame API für den Zugriff auf alle Datenbanken zu erstellen. Theoretisch sollten Sie also in der Lage sein, zwischen RDMS zu migrieren, ohne Code zu ändern (wenn Sie in Ihren Abfragen keine bestimmte RDBM-Funktion verwenden ), auch objektorientiert.

Es kommt also darauf an, welche Art von Code Sie produzieren möchten. Wenn Sie objektorientierte Ebenen oder einfache Funktionen bevorzugen ...

Mein Rat wäre

  1. PDO
  2. MySQLi
  3. MySQL

Auch mein Gefühl, die MySQL-API würde wahrscheinlich in zukünftigen Versionen von gelöscht werden PHP.


3
Es ist kein Gefühl mehr: PHP7 entfernte die MySQL-API und ließ PDO und MySQL
Manuel

3

mysqli ist die erweiterte Version von mysql.

Die PDO-Erweiterung definiert eine einfache, konsistente Schnittstelle für den Zugriff auf Datenbanken in PHP. Jeder Datenbanktreiber, der die PDO-Schnittstelle implementiert, kann datenbankspezifische Funktionen als reguläre Erweiterungsfunktionen verfügbar machen.


4
Das Kopieren aus der manuellen Datei ist nicht sehr nützlich.
XuDing

3

Insbesondere bietet die MySQLi-Erweiterung die folgenden äußerst nützlichen Vorteile gegenüber der alten MySQL-Erweiterung.

OOP-Schnittstelle (zusätzlich zur Prozedur) Vorbereitete Anweisung Unterstützung Transaktion + Unterstützung gespeicherter Prozeduren Schönere Verbesserungen der Syntaxgeschwindigkeit Verbessertes Debugging

PDO-Erweiterung

Die Erweiterung PHP Data Objects ist eine Datenbank-Abstraktionsschicht. Insbesondere ist dies keine MySQL-Schnittstelle, da sie Treiber für viele Datenbank-Engines (natürlich einschließlich MYSQL) bereitstellt.

PDO zielt darauf ab, eine konsistente API bereitzustellen, dh, wenn ein Datenbankmodul geändert wird, sollten die Codeänderungen, um dies widerzuspiegeln, minimal sein. Wenn Sie PDO verwenden, funktioniert Ihr Code normalerweise in vielen Datenbankmodulen "nur", indem Sie einfach den von Ihnen verwendeten Treiber ändern.

PDO ist nicht nur datenbankübergreifend kompatibel, sondern unterstützt auch vorbereitete Anweisungen, gespeicherte Prozeduren und mehr, während der MySQL-Treiber verwendet wird.

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.