342 Stimmen

mysqli oder PDO - was sind die Vor- und Nachteile?

Bei uns sind wir zwischen der Verwendung von mysqli und PDO für Dinge wie vorbereitete Anweisungen und Transaktionsunterstützung aufgeteilt. Einige Projekte verwenden das eine, einige das andere. Es besteht kaum eine realistische Wahrscheinlichkeit, dass wir jemals zu einem anderen RDBMS wechseln.

Ich bevorzuge PDO aus dem einzigen Grund, dass es benannte Parameter für vorbereitete Anweisungen erlaubt, und soweit ich weiß, tut mysqli das nicht.

Gibt es noch andere Vor- und Nachteile, die dafür sprechen, den einen oder den anderen als Standard zu wählen, wenn wir unsere Projekte konsolidieren, um nur einen Ansatz zu verwenden?

243voto

e-satis Punkte 547539

Nun, man könnte mit dem objektorientierten Aspekt, den vorbereiteten Anweisungen, der Tatsache, dass es ein Standard wird, usw. argumentieren. Aber ich weiß, dass es meistens besser ist, jemanden mit einem Killer-Feature zu überzeugen. Das ist es also:

Das Schöne an PDO ist, dass Sie die Daten abrufen und automatisch in ein Objekt injizieren können. Wenn Sie nicht mit einem ORM (weil es nur ein schnelles Skript ist), aber du magst Objekt-Mapping, es ist WIRKLICH cool:

class Student {

    public $id;
    public $first_name;
    public $last_name

    public function getFullName() {
        return $this->first_name.' '.$this->last_name
    }
}

try 
{
    $dbh = new PDO("mysql:host=$hostname;dbname=school", $username, $password)

    $stmt = $dbh->query("SELECT * FROM students");

    /* MAGIC HAPPENS HERE */

    $stmt->setFetchMode(PDO::FETCH_INTO, new Student);

    foreach($stmt as $student)
    {
        echo $student->getFullName().'<br />';
    } 

    $dbh = null;
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

57voto

Theo Punkte 128508

Das Verschieben einer Anwendung von einer Datenbank in eine andere ist nicht sehr häufig, aber früher oder später werden Sie vielleicht an einem anderen Projekt arbeiten, das ein anderes RDBMS verwendet. Wenn Sie mit PDO vertraut sind, müssen Sie zu diesem Zeitpunkt zumindest eine Sache weniger lernen.

Abgesehen davon finde ich die PDO-API ein wenig intuitiver, und es fühlt sich mehr wirklich objektorientiert. mysqli fühlt sich an wie es ist nur eine prozedurale API, die objektiviert wurde, wenn Sie wissen, was ich meine. Kurz gesagt, ich finde PDO einfacher zu handhaben, aber das ist natürlich subjektiv.

25voto

Brian Warshaw Punkte 21916

Ich habe angefangen, PDO zu verwenden, weil die Unterstützung für Anweisungen meiner Meinung nach besser ist. Ich verwende eine ActiveRecord-ähnliche Datenzugriffsschicht, und es ist viel einfacher, dynamisch generierte Anweisungen zu implementieren. Die Parameterbindung von MySQLi muss in einem einzigen Funktions-/Methodenaufruf erfolgen, wenn Sie also bis zur Laufzeit nicht wissen, wie viele Parameter Sie binden wollen, sind Sie gezwungen, die call_user_func_array() (ich glaube, das ist der richtige Funktionsname) für Selects. Und vergessen Sie die einfache dynamische Ergebnisbindung.

Vor allem mag ich PDO, weil es eine sehr vernünftige Abstraktionsebene ist. Es ist einfach, es in komplett abstrahierten Systemen zu verwenden, in denen man kein SQL schreiben will, aber es macht es auch einfach, ein optimiertes, reines Abfragesystem zu verwenden oder beides zu kombinieren.

17voto

Dave Gregory Punkte 893

PDO ist der Standard, den die meisten Entwickler erwarten. mysqli war im Wesentlichen eine maßgeschneiderte Lösung für ein bestimmtes Problem, aber es hat alle Probleme der anderen DBMS-spezifischen Bibliotheken. PDO ist der Ort, an dem die ganze harte Arbeit und das clevere Denken stattfinden werden.

15voto

Tom Punkte 6651

Und noch etwas ist zu bedenken: Zurzeit (PHP 5.2) ist die PDO-Bibliothek Buggy . Es ist voll von seltsamen Fehlern. Zum Beispiel: Vor dem Speichern einer PDOStatement in einer Variablen, sollte die Variable unset() um eine Vielzahl von Fehlern zu vermeiden. Die meisten dieser Fehler wurden in PHP 5.3 behoben und werden Anfang 2009 in PHP 5.3 veröffentlicht, das wahrscheinlich viele weitere Fehler enthalten wird. Sie sollten sich auf die Verwendung von PDO für PHP 6.1 konzentrieren, wenn Sie eine stabile Version wünschen, und PDO für PHP 5.3 verwenden, wenn Sie der Community helfen wollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X