0x01: Testen Sie, ob PDO erfolgreich installiert ist
Führen Sie den folgenden Code aus. Wenn der Parameter falsch ist, bedeutet dies, dass PDO installiert wurde. Wenn das Objekt nicht vorhanden ist, ändern Sie die PHP -Konfigurationsdatei php.ini und stornieren Sie die Kommentare in der vorherigen PHP_PDO_YOURSSQLSERVERHER.Extis.
Die Codekopie lautet wie folgt:
$ test = new pdo ();
0x02: Verbindung zur Datenbank herstellen
Führen Sie den Apache -Server aus und bestätigen Sie, dass der Server ausgeführt wurde und die PDO -Installation erfolgreich ist. Dann stellen wir eine Verbindung zur Datenbank her.
Die Codekopie lautet wie folgt:
$ dsn = 'MySQL: dbname = Demo; Host = localhost; port = 3306';
$ userername = 'root';
$ password = 'password_here';
versuchen {
$ db = new pdo ($ dsn, $ userername, $ password);
} catch (pdoException $ e) {
Die ('konnte keine Verbindung zur Datenbank herstellen:
'. $ e);
}
0x03: Grundlegende Abfrage
Durch die Verwendung von Abfragen und Exec in PDO wird die Abfragedatenbanken sehr einfach. Wenn Sie die Anzahl der Zeilen des Abfrageergebnisses erhalten möchten, ist dies für ausgewählte Abfrageanweisungen sehr nützlich.
Die Codekopie lautet wie folgt:
$ Anweisung = <<< SQL
WÄHLEN *
Von `foods`
Wo `gesund" = 0
SQL;
$ foods = $ db-> query ($ Anweisung);
Wenn die obige Abfrage korrekt ist, ist $ foods jetzt ein PDO -Anweisungsobjekt, von dem wir die Ergebnisse, die wir benötigen, und wie viele Ergebnissätze, die wir insgesamt abgefragt haben, erhalten können.
0x04: Holen Sie sich die Anzahl der Zeilen
Wenn Sie die MySQL -Datenbank verwenden, enthält die PDO -Anweisung eine RowCount -Methode, um die Anzahl der Zeilen im Ergebnissatz zu erhalten, wie im folgenden Code gezeigt:
Die Codekopie lautet wie folgt:
echo $ foods-> rowCount;
0x05: Traversal -Ergebnis -Set
PDO -Statement kann mit der Forech -Anweisung durchquert werden, wie im folgenden Code gezeigt:
Die Codekopie lautet wie folgt:
foreach ($ food-> fetchall () als $ food) {
echo $ food ['name']. ''
';
}
PDO unterstützt auch die Fetch -Methode, die nur das erste Ergebnis zurückgibt.
0x06: Entkommen den vom Benutzer eingegebenen Sonderzeichen
PDO bietet eine Methode namens Zitat, mit der Sonderzeichen den Orten mit Zitaten in der Eingabezeichenfolge entkommen können.
Die Codekopie lautet wie folgt:
US
Nach der Übertragung mit der Zitatmethode:
Die Codekopie lautet wie folgt:
$ DB-> QUOTE ($ Input): 'Dies ist/' s/'a/'/'/' hübsche Gefahr/'rous st/' ing '
0x07: exec ()
PDO kann mit der Methode exec () verwenden, um Vorgänge zu implementieren, zu löschen und einzufügen. Nach der Ausführung wird die Anzahl der betroffenen Zeilen zurückgegeben:
Die Codekopie lautet wie folgt:
$ Anweisung = <<< SQL
Löschen aus `foods`
Wo `gesund" = 1;
SQL;
echo $ db-> exec ($ Anweisung);
0x08: Vorverarbeitungsanweisung
Obwohl die EXEC -Methode und die Abfrage in PHP immer noch weit verbreitet sind und unterstützt werden, müssen die offiziellen Website von PHP immer noch vorab Vorverarbeitungsanweisungen verwenden, um sie zu ersetzen. Warum? Hauptsächlich, weil es sicherer ist. Vorverarbeitungsanweisungen fügen Parameter nicht direkt in tatsächliche Abfragen ein, wodurch viele potenzielle SQL -Injektionen vermieden werden.
Aus irgendeinem Grund verwendet PDO jedoch nicht wirklich die Vorverarbeitung. Es simuliert die Vorverarbeitungsmethoden und fügt Parameterdaten in Anweisungen ein, bevor die Anweisung an den SQL -Server weitergegeben wird, wodurch einige Systeme anfällig für die SQL -Injektion sind.
Wenn Ihr SQL -Server die Vorverarbeitung nicht wirklich unterstützt, können wir dieses Problem leicht beheben, indem wir die Parameter während der PDO -Initialisierung wie folgt übergeben:
Die Codekopie lautet wie folgt:
$ db-> setAttribute (pdo :: attr_emulate_prepares, false);
Hier ist unsere erste Vorverarbeitungserklärung:
Die Codekopie lautet wie folgt:
$ Anweisung = $ db-> prepe ('SELECT * aus Lebensmitteln, wo `name` =? und` gesund` =?');
$ Anweisung2 = $ db-> vorbereiten ('SELECT * aus Lebensmitteln, wobei `name` =: name und` gesund` =: gesund)';
Wie im obigen Code gezeigt, gibt es zwei Möglichkeiten, Parameter, Name und Anonymous zu erstellen (in einer Anweisung kann nicht gleichzeitig angezeigt werden). Dann können Sie BindValue verwenden, um Ihre Eingabe einzugeben:
Die Codekopie lautet wie folgt:
$ Statement-> BindValue (1, 'Kuchen');
$ Statement-> bindValue (2, true);
$ Anweisung2-> bindValue (': name', 'pie');
$ Statement2-> BindValue (': gesund', falsch);
Beachten Sie, dass Sie bei Verwendung benannter Parameter den Dickdarm () einschließen müssen. PDO hat auch eine Bindparam -Methode, die numerische Werte durch Referenz binden kann, dh nur nach den entsprechenden numerischen Werten, wenn die Anweisung ausgeführt wird.
Das einzige, was jetzt noch zu tun ist, ist, unsere Aussage auszuführen:
Die Codekopie lautet wie folgt:
$ Anweisung-> execute ();
$ Anweisung2-> execute ();
// Erhalten Sie unsere Ergebnisse:
$ cake = $ Statement-> fetch ();
$ pie = $ Anweisung2-> fetch ();
Um nur BindValue -Code -Fragmente zu verwenden, können Sie ein Array verwenden, um die Ausführungsmethode als Parameter wie folgt anzugeben:
Die Codekopie lautet wie folgt:
$ Anweisung-> Execute (Array (1 => 'Kuchen', 2 => true));
$ Anweisung2-> execute (array (': name' => 'pie', ': gesund' => false));
0x09: Transaktionen
Eine Transaktion besteht darin, eine Reihe von Abfragen auszuführen, speichert jedoch nicht ihre Auswirkungen auf die Datenbank. Der Vorteil davon besteht darin, dass Sie, wenn Sie 4 voneinander abhängige Einfügeanweisungen ausführen, bei Ausfällen zurückrollen können, damit andere Daten nicht in die Datenbank eingefügt werden können, um sicherzustellen, dass die voneinander abhängigen Felder korrekt eingefügt werden können. Sie müssen sicherstellen, dass die Datenbank -Engine, die Sie verwenden, Transaktionen unterstützt.
0x10: Transaktion starten
Sie können einfach die Methode mit BeginnTransaction () verwenden, um eine Transaktion zu starten:
Die Codekopie lautet wie folgt:
$ db-> begintransaction ();
$ db-> intransaction (); // WAHR!
Anschließend können Sie Ihre Datenbankoperationserklärung weiter ausführen und die Transaktion am Ende einreichen:
Die Codekopie lautet wie folgt:
$ db-> commit ();
Es gibt auch eine Rollback () -Methode ähnlich wie MySQLI, aber sie rollt nicht alle Typen (z. B. Verwendung der Droptabelle in MySQL), diese Methode ist nicht wirklich zuverlässig. Ich empfehle, zu vermeiden, dass sie sich auf diese Methode verlassen.
0x11: Andere nützliche Optionen
Es gibt verschiedene Optionen, die Sie verwenden können. Diese können als vierter Parameter eingegeben werden, wenn Ihr Objekt initialisiert wird.
Die Codekopie lautet wie folgt:
$ options = array ($ option1 => $ value1, $ option [..]);
$ db = new pdo ($ dsn, $ userername, $ password, $ option);
Pdo :: attr_default_fetch_mode
Sie können auswählen, welche Art von Ergebnismenge PDO zurückgibt, z.
Sie können das Ergebnis auch in eine bestimmte Klasse (Modell) einfügen, indem Sie einen Lesemodus für jede einzelne Abfrage wie folgt festlegen:
Die Codekopie lautet wie folgt:
$ query = $ db-> query ('select * aus `foods`');
$ foods = $ query-> fetchall (pdo :: fetch_class, 'food');
Pdo :: attr_errmode
Wir haben dies oben erklärt, aber diejenigen, die Trycatch mögen, müssen verwenden: pdo :: ermode_exception. Wenn Sie aus irgendeinem Grund eine PHP -Warnung werfen möchten, verwenden Sie PDO :: Errmode_Warning.
Pdo :: attr_timeout
Wenn Sie sich über die Ladezeit besorgt, können Sie diese Eigenschaft verwenden, um eine Zeitüberschreitungszeit für Ihre Abfrage in Sekunden zu geben. Beachten Sie, dass die Standard -Ausnahme von E_WARNing, wenn Sie festgelegt sind, die Zeit überschreitet, sofern PDO :: attr_errmode nicht geändert wird.