Heim >Backend-Entwicklung >PHP-Tutorial >002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

不言
不言Original
2018-04-08 14:37:451963Durchsuche



Wenn wir PHP für den Zugriff auf die Datenbank verwenden, haben wir zusätzlich zum Datenbanktreiber, der mit PHP geliefert wird, im Allgemeinen zwei bessere Optionen: PDO und MySQLi . Im eigentlichen Entwicklungsprozess müssen Sie zunächst über ein relativ umfassendes Verständnis beider verfügen, um zu entscheiden, welches Sie wählen möchten. In diesem Artikel werden die Unterschiede analysiert und die Unterstützung, Stabilität, Leistung usw. mehrerer Datenbanktypen verglichen.

tr>

 

PDO MySQLi
Database support 12 different drivers MySQL only
API OOP OOP + procedural
Connection Easy Easy
Named parameters Yes No
Object mapping Yes Yes
Prepared statements 
(client side)
Yes No
Performance Fast Fast
Stored procedures Yes Yes
PDO strong> MySQLi
Datenbankunterstützung 12 verschiedene Treiber Nur MySQL
API OOP OOP + prozedural
Verbindung Einfach Einfach
Benannte Parameter Ja Nein
Objektzuordnung Ja Ja
Vorbereitete Anweisungen (clientseitig) stark> Ja Nein
Leistung Schnell td> Schnell
Gespeicherte Prozeduren Ja Ja

1. Verbindung


002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

// PDO$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); 
// mysqli, procedural way$mysqli = mysqli_connect('localhost','username','password','database'); 
// mysqli, object oriented way$mysqli = new mysqli('localhost','username','password','database');

002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

2. API-Unterstützung

Sowohl PDO als auch MySQLi bieten API in objektorientierter Form, MySQLi bietet jedoch auch prozessorientierte API für Neulinge leichter verständlich. Wenn Sie mit dem nativen PHP-MySQL-Treiber vertraut sind, werden Sie feststellen, dass es einfach ist, den ursprünglichen Datenzugriff durch die MySQLi-Schnittstelle zu ersetzen. Der Vorteil der Verwendung von PDO besteht darin, dass PDO mehrere Datenbanken unterstützt, während MySQLi nur MySQL unterstützt. Sobald Sie es beherrschen, können Sie mehrere Datenbanken nach Belieben verwenden und verbinden.

3. Datenbankunterstützung

Der größte Vorteil von PDO gegenüber MySQLi besteht darin, dass PDO viele Arten von Datenbanken unterstützt, während MySQLi nur MySQLi unterstützt. Um zu sehen, welche Datenbanken PDO unterstützt, verwenden Sie den folgenden Code:

var_dump(PDO::getAvailableDrivers());

Welche Vorteile bietet die Unterstützung mehrerer Datenbanken? Wenn Ihr Programm in Zukunft von MySQL auf SQL Server oder Oracle umsteigen möchte, kommen die Vorteile von PDO zum Tragen, da die Änderung der Datenbank für die Programmschnittstelle transparent ist und die Änderungen am PHP-Code sehr gering sind, wenn Sie MySQLi verwenden , dann müssen alle Benutzer überall in der Datenbank neu geschrieben werden, daher kann ich nur solche Änderungen vornehmen.

4. Unterstützung benannter Parameter

PDO benannte Parameter und Parameterbindung:


002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

$params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600);     
$pdo->prepare('
    SELECT * FROM users
    WHERE username = :username
    AND email = :email
    AND last_login > :last_login');     
$pdo->execute($params);

002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

Und MySQLi-Parameterbindung:


002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

$query = $mysqli->prepare('
    SELECT * FROM users
    WHERE username = ?
    AND email = ?
    AND last_login > ?');     
$query->bind_param('sss', 'test', $mail, time() - 3600);$query->execute();

002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

Aus dem obigen Vergleich können wir sehen, dass PDO Werte über benannte Parameter bindet, während die MySQLi-Parameterbindung den Punkt verwendet markieren Sie „?“ und bindet Werte streng in der Reihenfolge dieses Fragezeichens. Obwohl der Code nicht so lang zu sein scheint wie der entsprechende Name von PDO, besteht ein Nachteil darin, dass die Lesbarkeit und Wartbarkeit verringert wird, wenn die Anzahl der Parameter relativ gering ist 10 Der Fall von einem oder mehreren ist schmerzhafter. Sie müssen Werte einzeln in der Reihenfolge der Fragezeichen zuweisen. Wenn einer von ihnen falsch ist, sind die folgenden falsch.

Leider unterstützt MySQLi keine benannte Parameterbindung wie PDO.

5. Objektzuordnung

Datenbankbasierte Entwicklung liest im Allgemeinen Daten aus der Datenbank und verwendet dann ein Objekt zum Übertragen der Daten. Sowohl PDO als auch MySQLi unterstützen die Objektzuordnung. Angenommen, es gibt eine Benutzerklasse, die einige Eigenschaften hat, die der Datenbank entsprechen. Wenn nicht, müssen wir für die Objektzuordnung nach dem Lesen der Daten den Feldern einzeln Werte zuweisen, was sehr umständlich ist.

Bitte sehen Sie sich den Code der beiden Objekte unten an:

002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

class User {    public $id;    public $first_name;    public $last_name;     
    public function info()
    {        return '#'.$this->id.': '.$this->first_name.' '.$this->last_name;
    }
}

002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

6. Sicherheit


Beide können SQL-Injection verhindern. Schauen wir uns zunächst ein Beispiel an. 002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

$query = "SELECT id, first_name, last_name FROM users";     
// PDO$result = $pdo->query($query);$result->setFetchMode(PDO::FETCH_CLASS, 'User'); 
while ($user = $result->fetch()) {    echo $user->info()."\n";
}// MySQLI, procedural wayif ($result = mysqli_query($mysqli, $query)) {    while ($user = mysqli_fetch_object($result, 'User')) {        echo $user->info()."\n";
    }
}// MySQLi, object oriented wayif ($result = $mysqli->query($query)) {    while ($user = $result->fetch_object('User')) {        echo $user->info()."\n";
    }
}

Wenn der vom Benutzer eingegebene Wert des Parameters Benutzername der oben genannte Wert ist („'; DELETE FROM users; /*“), wenn Sie tun dies nicht. Wenn dieser Wert in irgendeiner Weise verarbeitet wird, fügt der Benutzer die Löschanweisung erfolgreich ein und alle Datensätze in der Benutzertabelle werden gelöscht. 002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi6.1. Manuelle Flucht

$_GET['username'] = "'; DELETE FROM users; /*"

Das Obige verwendet die Funktionen, die mit den PDO- und MySQLi-APIs geliefert werden, um die erhaltenen Parameterwerte zu maskieren.

6.2. Bindung vorbereiteter Anweisungsparameter

Das Folgende ist eine effizientere und sicherere Möglichkeit, vorbereitete Anweisungsparameter zu binden:

002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

// PDO, "manual" escaping$username = PDO::quote($_GET['username']); 
$pdo->query("SELECT * FROM users WHERE username = $username");         
// mysqli, "manual" escaping$username = mysqli_real_escape_string($_GET['username']); 
$mysqli->query("SELECT * FROM users WHERE username = '$username'");

002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi

7. Leistung

Da PDO andere Nicht-MySQL-Datenbanken unterstützen kann und MySQLi speziell für MySQL entwickelt wurde, ist die Leistung von MySQLi etwas besser als die von PDO. Allerdings sind PDO und MySQLi immer noch nicht so schnell wie die native MySQL-Erweiterung von PHP. Aber diese Art von Leistungsvergleich bedeutet eigentlich nicht viel, da sie alle recht schnell sind. Wenn Ihre Programmleistungsanforderungen nicht besonders anspruchsvoll sind, können alle drei Sie zufriedenstellen. Welches Sie wählen möchten, müssen Sie anhand Ihrer praktischen Situation abwägen.

8. Zusammenfassung

PDO unterstützt 12 Arten von Datenbanktreibern und die Bindung benannter Parameter ist der größte Vorteil. Durch den obigen Vergleich wissen Sie meiner Meinung nach auch, was Sie in Ihrem eigenen Projekt verwenden werden einer ist mit der Datenbank verbunden?

Verwandte Empfehlungen:

001 – Detaillierte Analyse der PDO-Nutzung

Das obige ist der detaillierte Inhalt von002 – Unterschiede und Möglichkeiten zwischen PDO und MySQLi. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn