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.
|
PDO strong> | MySQLi | |||||||||||||||||||||||||||
Datenbankunterstützung | 12 verschiedene Treiber | Nur MySQL | |||||||||||||||||||||||||||
API | OOP | OOP + prozedural | |||||||||||||||||||||||||||
Verbindung | Einfach | Einfach | tr>|||||||||||||||||||||||||||
Benannte Parameter | Ja | Nein | |||||||||||||||||||||||||||
Objektzuordnung | Ja | Ja | |||||||||||||||||||||||||||
Vorbereitete Anweisungen (clientseitig) stark> | Ja | Nein | |||||||||||||||||||||||||||
Leistung | Schnell td> | Schnell | |||||||||||||||||||||||||||
Gespeicherte Prozeduren | Ja | Ja |
// 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');
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.
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.
PDO benannte Parameter und Parameterbindung:
$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);
Und MySQLi-Parameterbindung:
$query = $mysqli->prepare(' SELECT * FROM users WHERE username = ? AND email = ? AND last_login > ?'); $query->bind_param('sss', 'test', $mail, time() - 3600);$query->execute();
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.
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:
class User { public $id; public $first_name; public $last_name; public function info() { return '#'.$this->id.': '.$this->first_name.' '.$this->last_name; } }
6. Sicherheit
$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"; } }
$_GET['username'] = "'; DELETE FROM users; /*"
6.2. Bindung vorbereiteter Anweisungsparameter
// 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'");
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.
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!