PDO (PHP Data Object) ist eine neue Sache in PHP 5. Wenn PHP 6 veröffentlicht wird, verwendet PHP 6 standardmäßig nur PDO zur Verarbeitung der Datenbank und verschiebt alle Datenbankerweiterungen nach PECL, sodass die Standardeinstellung nicht mehr vorhanden ist .php_mysql.dll und dergleichen, was soll ich tun? Wir können nur mit der Zeit gehen, also habe ich es mit PDO versucht. (Dieser Artikel ist nur ein Einstiegsartikel, Experten können ihn überspringen, haha)
[Was ist PDO?]
PDO ist eine wichtige neue Funktion, die PHP 5 hinzugefügt wurde, da PHP4/PHP3 vor PHP 5 eine Reihe von Datenbankerweiterungen hatte, mit denen sie kommunizieren konnten Verbindung und Verarbeitung, php_mysql.dll, php_pgsql.dll, php_mssql.dll, php_sqlite.dll und andere Erweiterungen, um MySQL, PostgreSQL, MS SQL Server, SQLite zu verbinden. Ebenso müssen wir ADOdb, PEAR::DB, PHPlib verwenden: :Abstrakte Datenbankklassen wie DB sind äußerst umständlich und ineffizient, um uns zu helfen. Denn wie kann die Effizienz von PHP-Code so hoch sein, dass wir ihn direkt in C/C++ schreiben können? Daher ist die Entstehung von PDO unvermeidlich. Jeder sollte seine Verwendung mit einer ruhigen Lernhaltung akzeptieren. Vielleicht werden Sie feststellen, dass es Ihnen viel Aufwand ersparen kann.
[Installieren von PDO]
Ich verwende Windows XP SP2, daher wird der gesamte Vorgang unter Windows ausgeführt. Für Linux/FreeBSD und andere Plattformen finden Sie bitte die Informationen und richten Sie die Installation selbst ein.
Meins ist PHP 5.1.4, das bereits mit der Erweiterung php_pdo.dll geliefert wird, aber es erfordert ein wenig Setup, bevor es verwendet werden kann.
Öffnen Sie c:windowsphp.ini, das ist meine PHP-Konfigurationsdatei, und suchen Sie die folgende Zeile:
extension_dir
Dies ist das Verzeichnis, in dem sich unsere Erweiterung befindet: C:php5ext, dann werde ich es tun Ändern Sie diese Zeile in:
extension_dir = "C:/php5/ext"
und suchen Sie sie dann unter php.ini:
;;;;;;;;;;;;;;;;;;;;;;;
; Dynamische Erweiterungen ;
;;;;;;;;;;;;;;;;;;;;
Es gibt eine Reihe ähnlicher Dinge wie ;extension=php_mbstring.dll unten Fügen Sie es am Ende hinzu. Unsere PDO-Erweiterung:
extension=php_pdo.dll
extension=php_pdo_mysql.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
extension=php_pdo_mssql.dll
extension=php_pdo_odbc.dll
extension=php_pdo_firebird.dll
;extension=php_pdo_oci8.dll
Es können verschiedene PDO-Treiber hinzugefügt werden, aber die folgende php_pdo_oci8.dll verfügt nicht über diese, da ich die Oralce-Datenbank nicht installiert habe, daher verwende ich ein Semikolon, um sie auszukommentieren. Dann starten Sie unseren Webserver IIS/Apache neu, meiner ist IIS, hey, Sie schauen auf mich herab, unter Windows ist es einfach.
Schreiben Sie nach dem Neustart eine phpinfo.php-Datei in das Dokumentenverzeichnis unseres Webservers und fügen Sie diese hinzu:
<?
phpinfo();
?>
Dann öffnen Sie unseren schönen Browser: IE/FireFox, meiner ist FireFox 2.0, ich habe ihn gerade heruntergeladen, er ist großartig, ich habe keine Angst vor betrügerischer Software, haha.
Geben Sie im Browser ein: http://localhost/phpinfo.php . Wenn Ihr Pfad zu dieser Seite inkonsistent ist, geben Sie ihn bitte selbst ein.
Wenn Sie es im Ausgabeinhalt erfolgreich sehen können:
PDO
PDO-Unterstützung aktiviert
PDO-Treiber mysql, pgsql, sqlite, mssql, odbc, firebird.
Auf der Rückseite finden Sie verschiedene Treiberanweisungen: PDO_Firebird, pdo_mssql, pdo_mysql, PDO_ODBC, pdo_pgsql, pdo_sqlite.
Ansonsten gratulieren wir Ihnen bitte sorgfältig zu Ihrer Installation .
[Schnelltest]
Ich verwende MySQL 4.0.26, aber ich persönlich empfehle jedem, MySQL 4.1.x oder MySQL 5.0.x zu verwenden, da diese Versionen viele interessante Dinge enthalten, die es wert sind, gelernt zu werden. Womit sich unser PDO verbinden muss, ist mein MySQL 4.0. Wenn Sie MySQL nicht installiert haben, installieren Sie es bitte selbst. Wir haben MySQL eingerichtet und der Testbibliothek Tabelle foo hinzugefügt, einschließlich vier Feldern wie ID, Name, Geschlecht und Zeit.
Wir begannen mit der Erstellung der ersten PDO-Anwendung und erstellten eine pdo.php-Datei im Webdokumentverzeichnis:
<?php
$dsn = "mysql:host=localhost;dbname=test";
$db = neues PDO($dsn, 'root', '');
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()");
echo $count;
$db = null;
?>
Ich verstehe nicht, was es bedeutet, erklären wir es uns langsam. Diese Zeile:
$dsn = "mysql:host=localhost;dbname=test";
Sehen Sie sich die darin enthaltenen Informationen an: Der Datenbanktyp ist mysql, die Hostadresse ist localhost und der Datenbankname ist ein Test. Die Datenquellenkonstruktionsmethoden verschiedener Datenbanken sind unterschiedlich.
$db = new PDO($dsn, 'root', '');
Initialisiert ein PDO-Objekt. Der erste Parameter des Konstruktors ist unsere Datenquelle, der zweite ist der Benutzer, der sich mit dem Datenbankserver verbindet, und der dritte Parameter ist das Passwort . Wir können nicht garantieren, dass die Verbindung erfolgreich ist. Auf Ausnahmen gehen wir später ein.
$count = $db->exec("INSERT INTO foo SET name = 'heiyeluren',gender='male',time=NOW()");
echo $count;
ruft unser erfolgreich verbundenes PDO-Objekt auf, um eine Abfrage auszuführen. Die Verwendung der PDO::exec()-Methode gibt ein Ergebnis zurück, das sich auf den Datensatz auswirkt. Abschließend müssen Sie noch die Objektressource beenden:
$db = null;
Standardmäßig ist dies keine lange Verbindung zur Datenbank, Sie müssen einen letzten Parameter hinzufügen: array(PDO::ATTR_PERSISTENT => true). Es sieht so aus:
$db = new PDO( $dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true));
Es ist vielleicht nicht viel anders vom vorherigen, ähnelt aber in gewisser Weise ADOdb.
[Weiter lernen]
Wenn wir Daten extrahieren möchten, sollten wir die Datenerfassungsfunktion verwenden. ($db, das unten verwendet wird, sind alle oben verbundenen Objekte)
<?php
foreach($db->query("SELECT * FROM foo")){
print_r($row);
}
?>
Wir können auch diese Erfassungsmethode verwenden:
<?php
$rs = $db->query("SELECT * FROM foo");
while($row = $rs->fetch()){
print_r($row);
}
?>
Wenn Sie alle Daten auf einmal in das Array aufnehmen möchten, können Sie Folgendes tun:
<?php
$rs = $db->query("SELECT * FROM foo");
$result_arr = $rs->fetchAll();
print_r($result_arr);
?>
Array
([0] => Array(
[id] => 1
[0] => 1
[Name] => heiyeluren
[1] =>heiyeluren
[Geschlecht] =>Männlich[2] =>Männlich[Zeit] =>2006-10-28 23:14:23
[3] => 28.10.2006 23:14:23
)
}
Schauen wir uns die darin enthaltenen Datensätze an. Es gibt sowohl digitale Indizes als auch zugehörige Indizes, was eine Verschwendung von Ressourcen darstellt. Wir benötigen nur den zugehörigen Index:
<?php
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER);
$rs = $db->query("SELECT * FROM foo");
$rs->setFetchMode(PDO::FETCH_ASSOC);
$result_arr = $rs->fetchAll();
print_r($result_arr);
?>
Schauen Sie sich den obigen Code an. Die Methode setAttribute() dient zum Festlegen einiger Attribute. Die Hauptattribute sind: PDO::ATTR_CASE, PDO::ATTR_ERRMODE usw. Was wir hier festlegen müssen, ist PDO::ATTR_CASE , verwenden wir den zugehörigen Index, um Daten abzurufen. Beim Festlegen gibt es mehrere Optionen dafür, ob der zugehörige Index Groß- oder Kleinbuchstaben ist:
PDO::CASE_LOWER – Erzwingt, dass der Spaltenname Kleinbuchstaben ist. PDO::CASE_NATURAL – Der Spaltenname lautet auf die ursprüngliche Art und Weise PDO::CASE_UPPER – Erzwingt die Großschreibung des Spaltennamens.
Wir verwenden die setFetchMode-Methode, um den Typ des Rückgabewerts zum Abrufen der Ergebnismenge festzulegen. Die gleichen Typen sind:
PDO::FETCH_ASSOC – assoziatives Array aus PDO ::FETCH_NUM – numerische Indexarrayform PDO::FETCH_BOTH – beide Arrayformen Ja, dies ist die Standardform von PDO::FETCH_OBJ – in Form eines Objekts, ähnlich dem vorherigen mysql_fetch_object().
Natürlich, im Allgemeinen Verwenden Sie PDO::FETCH_ASSOC. Was Sie konkret verwenden, hängt von Ihren eigenen Anforderungen ab.
Zusätzlich zu der oben genannten Methode zum Abrufen von Daten gibt es auch diese Methode:
<?php
$rs = $db->prepare("SELECT * FROM foo");
$rs->execute();
while($row = $rs->fetch()){
print_r($row);
}
?>
Eigentlich ist es fast dasselbe. Wenn Sie die Ergebnisse eines Felds in einem bestimmten Datensatz abrufen möchten, können Sie PDOStatement::fetchColumn():
<?php
verwenden
$rs = $db->query("SELECT COUNT(*) FROM foo");
$col = $rs->fetchColumn();
echo $col;
?>
Im Allgemeinen wird fetchColumn() verwendet, um Zählstatistiken durchzuführen, oder einige Datensätze, die nur ein einzelnes Feld erfordern, sind einfach zu bedienen.
Um die oben genannten Operationen kurz zusammenzufassen:
Abfrageoperationen sind hauptsächlich PDO::query(), PDO::exec() und PDO::prepare(). PDO::query() wird hauptsächlich für Operationen verwendet, die aufgezeichnete Ergebnisse zurückgeben, insbesondere SELECT-Operationen werden hauptsächlich für Operationen verwendet, die keine Ergebnismenge zurückgeben, wie z. B. INSERT, UPDATE, DELETE und andere Operationen. Es wird zurückgegeben: Das Ergebnis ist die Anzahl der Spalten, die von der aktuellen Operation betroffen sind. PDO::prepare() ist hauptsächlich eine Vorverarbeitungsoperation. Sie müssen $rs->execute() verwenden, um die SQL-Anweisung in der Vorverarbeitung auszuführen. Diese Methode kann in diesem Artikel nicht einfach erklärt werden . Jeder kann auf Handbücher und andere Dokumentationen zurückgreifen. Die Hauptoperationen zum Erhalten der Ergebnismenge sind: PDOStatement::fetchColumn(), PDOStatement::fetch(), PDOStatement::fetchALL(). PDOStatement::fetchColumn() ist ein Feld des ersten im Abrufergebnis angegebenen Datensatzes. Der Standardwert ist das erste Feld. PDOStatement::fetch() wird verwendet, um einen Datensatz abzurufen, und PDOStatement::fetchAll() wird verwendet, um alle Datensatzsätze in einem abzurufen. Um die Ergebnisse zu erhalten, können Sie den Typ des erforderlichen Ergebnissatzes über PDOStatement::setFetchMode festlegen .
Es gibt auch zwei umgebende Operationen: PDO::lastInsertId() und PDOStatement::rowCount(). PDO::lastInsertId() gibt den letzten Einfügevorgang zurück und der Typ der Primärschlüsselspalte ist die letzte Auto-Inkrement-ID. PDOStatement::rowCount() wird hauptsächlich für die Ergebnismenge verwendet, die von den DELETE-, INSERT- und UPDATE-Operationen von PDO::query() und PDO::prepare() betroffen ist, und ist für die Methode PDO::exec() ungültig und SELECT-Operationen.
[Fehlerbehandlung]
Was sollten Sie tun, wenn im Programm ein Fehler auftritt? Wir beschreiben hier die Fehlerinformationen und Ausnahmebehandlung der PDO-Klasse.
1. Objektorientierter Ansatz
Schauen wir uns zunächst an, wie mit Verbindungsfehlern usw. umgegangen wird, und verwenden Sie den objektorientierten Ansatz, um damit umzugehen:
<?php
versuchen {
$db = neues PDO('mysql:host=localhost;dbname=test', $user, $pass);
$db = null;
} Catch (PDOException $e) {
print „Fehler:“ $e->getMessage() „<br/>“;
sterben();
}
?>
Hier verwenden wir die objektorientierte Ausnahmebehandlungsfunktion von PHP 5. Wenn es eine Ausnahme gibt, initialisieren wir sie, indem wir PDOException aufrufen, um eine Ausnahmeklasse zu initialisieren.
Attributstruktur der PDOException-Ausnahmeklasse:
<?php
Die Klasse PDOException erweitert Exception
{
public $errorInfo = null; // Für Fehlerinformationen können Sie PDO::errorInfo() oder PDOStatement::errorInfo() aufrufen, um auf protected zuzugreifen. $message; // Für Ausnahmeinformationen können Sie Exception::getMessage() ausprobieren access protected $code ; // SQL-Statusfehlercode, auf den mit Exception::getCode() zugegriffen werden kann
}
?>
Diese Ausnahmebehandlungsklasse ist in die integrierte Ausnahmebehandlungsklasse von PHP 5 integriert. Werfen wir einen kurzen Blick auf die Struktur der integrierten Ausnahmebehandlungsklasse von PHP 5:
<?php
classException
{
//Eigenschaft protected $message = 'Unbekannte Ausnahme'; //Benutzerdefinierter Ausnahmecode protected $file; //Der Dateiname, in dem die Ausnahme aufgetreten ist; wo die Ausnahme aufgetreten ist Zeilennummer
// Methode final function getMessage(); // Ausnahmecode zurückgeben final function getFile(); // Den Dateinamen zurückgeben, bei dem die Ausnahme aufgetreten ist final function getLine (); // Return Die Codezeilennummer, in der die Ausnahme aufgetreten ist. final function getTrace(); // backtrace() array final function getTraceAsString(); formatierte getTrace()-Informationen
}
?>
Dementsprechend können getFile() und getLine() im Code entsprechend aufgerufen werden, um Fehler zu lokalisieren und das Debuggen komfortabler zu gestalten.
2. Verwenden Sie den prozessorientierten Ansatz,
um sich zuerst den Code anzusehen:
<?
$db = neues PDO('mysql:host=localhost;dbname=test', $user, $pass);
$rs = $db->query("SELECT aa,bb,cc FROM foo");
if ($db->errorCode() != '00000'){
print_r($db->errorInfo());
Ausfahrt;
}
$arr = $rs->fetchAll();
print_r($arr);
$db = null;
?>
PDO- und PDOStatement-Objekte verfügen über die Methoden errorCode() und errorInfo(). Wenn keine Fehler vorliegen, gibt errorCode() Folgendes zurück: 00000, andernfalls werden einige Fehlercodes zurückgegeben. errorInfo() gibt ein Array zurück, einschließlich der von PHP und MySQL definierten Fehlercodes und Fehlerinformationen. Die Array-Struktur ist wie folgt:
Array
(
[0] => 42S22
[1] => 1054
[2] => Unbekannte Spalte „aaa“ in „Feldliste“
)
Nachdem jede Abfrage ausgeführt wurde, ist das Ergebnis von errorCode() das aktuellste, sodass wir die Anzeige der Fehlermeldungen einfach selbst steuern können.
[Einfache Zusammenfassung]
Aus der obigen Verwendung können wir ersehen, dass PDO tatsächlich leistungsstark ist. Es gibt auch einige andere Dinge, die ich nicht erwähnt habe, wie z. B. Bindungsparameter, Vorverarbeitung, gespeicherte Prozeduren, Transaktionsverarbeitung und andere Funktionen. Darüber hinaus gibt es in der Oracle-Datenbank selbst viele Besonderheiten zur Datenerweiterung, die ein gründliches Studium und Verständnis erfordern. Dieser Artikel beschreibt nur kurz einige Einführungskenntnisse, die als einfaches Verständnis von PDO angesehen werden können.