Heim  >  Artikel  >  Web-Frontend  >  Zusammenfassung der Fähigkeiten von PHP PDO Operations_Javascript

Zusammenfassung der Fähigkeiten von PHP PDO Operations_Javascript

WBOY
WBOYOriginal
2016-05-16 16:31:131498Durchsuche

0x01: Testen Sie, ob PDO erfolgreich installiert wurde

Führen Sie den folgenden Code aus. Wenn der Parameterfehler angezeigt wird, wurde PDO installiert. Wenn das Objekt nicht vorhanden ist, ändern Sie die PHP-Konfigurationsdatei php.ini und löschen Sie den Kommentar vor php_pdo_yourssqlserverhere.extis.

Code kopieren Der Code lautet wie folgt:

$test=new PDO();

0x02: Mit Datenbank verbinden

Führen Sie den Apache-Server aus, stellen Sie sicher, dass der Server läuft und PDO erfolgreich installiert wurde, und stellen Sie dann eine Verbindung zur Datenbank her.

Code kopieren Der Code lautet wie folgt:

$dsn = 'mysql:dbname=demo;host=localhost;port=3306';
$username = 'root';
$password = 'password_here';
versuche es mit {
$db = neues PDO($dsn, $username, $password); } Catch(PDOException $e) {
Die('Es konnte keine Verbindung zur Datenbank hergestellt werden:
' . $e);
}

0x03: Basisabfrage

Die Verwendung von Abfrage- und Exec-Methoden in PDO macht die Datenbankabfrage sehr einfach. Wenn Sie die Anzahl der Zeilen im Abfrageergebnis ermitteln möchten, ist exec sehr einfach zu verwenden und daher für SELECT-Abfrageanweisungen sehr nützlich.

Code kopieren Der Code lautet wie folgt:
$statement = << AUSWÄHLEN *
VON „Lebensmitteln“
WO „gesund“ = 0
SQL;

$foods = $db->query($statement);

Wenn die obige Abfrage korrekt ist, ist $foods jetzt ein PDO-Anweisungsobjekt, von dem wir die benötigten Ergebnisse erhalten können und wie viele Ergebnissätze wir insgesamt abgefragt haben.

0x04: Anzahl der Zeilen ermitteln

Wenn Sie eine MySQL-Datenbank verwenden, enthält die PDO-Anweisung eine rowCount-Methode, um die Anzahl der Zeilen im Ergebnissatz abzurufen, wie im folgenden Code gezeigt:


Code kopieren Der Code lautet wie folgt:
echo $foods->rowCount;

0x05: Durchlaufen der Ergebnismenge

PDO-Statment kann mit der forech-Anweisung durchlaufen werden, wie im folgenden Code gezeigt:


Code kopieren Der Code lautet wie folgt:
foreach($foods->FetchAll() as $food) {
echo $food['name'] '
';
}

PDO unterstützt auch die Fetch-Methode, die nur das erste Ergebnis zurückgibt.

0x06: Vom Benutzer eingegebene Escape-Sonderzeichen

PDO bietet eine Methode namens quote, die Sonderzeichen an Stellen mit Anführungszeichen in der Eingabezeichenfolge maskieren kann.

Code kopieren Der Code lautet wie folgt:
$input= das ist ein ziemlich gefährlicher String

Nach der Übertragung mit der Quote-Methode:


Code kopieren Der Code lautet wie folgt:
$db->quote($input): 'das ist' eine ''ziemlich gefährliche Zeichenfolge''

0x07: exec()

PDO kann die Methode exec() verwenden, um UPDATE-, DELETE- und INSERT-Operationen zu implementieren. Nach der Ausführung gibt es die Anzahl der betroffenen Zeilen zurück:

Code kopieren Der Code lautet wie folgt:
$statement = << AUS „Lebensmittel“ LÖSCHEN
WHERE `gesund` = 1;
SQL;
echo $db->exec($statement);

0x08: Vorbereitete Anweisung

Obwohl Exec-Methoden und -Abfragen in PHP immer noch weit verbreitet sind und unterstützt werden, verlangt die offizielle PHP-Website immer noch, dass jeder stattdessen vorbereitete Anweisungen verwendet. Warum? Vor allem, weil: es sicherer ist. Vorbereitete Anweisungen fügen Parameter nicht direkt in die eigentliche Abfrage ein, wodurch viele potenzielle SQL-Injections vermieden werden.

Aus irgendeinem Grund verwendet PDO jedoch keine Vorverarbeitung. Es simuliert die Vorverarbeitung und fügt Parameterdaten in die Anweisung ein, bevor sie an den SQL-Server übergeben wird. Dadurch ist das System anfällig für SQL-Injection.

Wenn Ihr SQL-Server die Vorverarbeitung nicht wirklich unterstützt, können wir dieses Problem leicht beheben, indem wir Parameter während der PDO-Initialisierung wie folgt übergeben:

Code kopieren Der Code lautet wie folgt:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Hier ist unsere erste vorbereitete Stellungnahme:

Code kopieren Der Code lautet wie folgt:

$statement = $db->prepare('SELECT * FROM food WHERE `name`=? AND `healthy`=?');
$statement2 = $db->prepare('SELECT * FROM food WHERE `name`=:name AND `healthy`=:healthy)';

Wie im obigen Code gezeigt, gibt es zwei Möglichkeiten, Parameter zu erstellen: benannte und anonyme (können nicht gleichzeitig in einer Anweisung erscheinen). Sie können dann bindValue verwenden, um Ihre Eingabe einzugeben:

Code kopieren Der Code lautet wie folgt:

$statement->bindValue(1, 'Cake');
$statement->bindValue(2, true);

$statement2->bindValue(':name', 'Pie');
$statement2->bindValue(':healthy', false);

Beachten Sie, dass Sie bei der Verwendung benannter Parameter einen Doppelpunkt (:) einfügen müssen. PDO verfügt außerdem über eine bindParam-Methode, die Werte per Referenz binden kann, was bedeutet, dass nur bei Ausführung der Anweisung nach dem entsprechenden Wert gesucht wird.

Jetzt müssen wir nur noch unsere Aussage ausführen:

Code kopieren Der Code lautet wie folgt:

$statement->execute();
$statement2->execute();

//Erhalten Sie unsere Ergebnisse:
$cake = $statement->Fetch();
$pie = $statement2->Fetch();

Um die Codefragmentierung zu vermeiden, die durch die alleinige Verwendung von bindValue verursacht wird, können Sie ein Array als Parameter für die Ausführungsmethode verwenden, etwa so:

Code kopieren Der Code lautet wie folgt:

$statement->execute(array(1 => 'Cake', 2 => true));
$statement2->execute(array(':name' => 'Pie', ':healthy' => false));

0x09: Transaktion

Eine Transaktion führt eine Reihe von Abfragen aus, speichert deren Auswirkungen jedoch nicht in der Datenbank. Dies hat den Vorteil, dass Sie, wenn Sie vier voneinander abhängige Einfügeanweisungen ausführen und eine davon fehlschlägt, ein Rollback durchführen können, sodass keine anderen Daten in die Datenbank eingefügt werden können, um sicherzustellen, dass voneinander abhängige Felder korrekt eingefügt werden können. Sie müssen sicherstellen, dass die von Ihnen verwendete Datenbank-Engine Transaktionen unterstützt.

0x10: Transaktion starten

Sie können einfach die Methode beginTransaction() verwenden, um eine Transaktion zu starten:

Code kopieren Der Code lautet wie folgt:

$db->beginTransaction();
$db->inTransaction(); // true!

Dann können Sie mit der Ausführung Ihrer Datenbankbetriebsanweisungen fortfahren und die Transaktion am Ende festschreiben:

Code kopieren Der Code lautet wie folgt:

$db->commit();

Es gibt auch eine Methode ähnlich der rollBack() in MySQLi, die jedoch nicht alle Typen zurücksetzt (z. B. die Verwendung von DROP TABLE in MySQL). Ich empfehle, sich nicht darauf zu verlassen Verfahren.

0x11: Weitere nützliche Optionen

Es gibt mehrere Optionen, die Sie in Betracht ziehen können. Diese können bei der Initialisierung Ihres Objekts als vierter Parameter eingegeben werden.

Code kopieren Der Code lautet wie folgt:

$options = array($option1 => $value1, $option[..]);
$db = neues PDO($dsn, $username, $password, $options);

PDO::ATTR_DEFAULT_FETCH_MODE

Sie können auswählen, welche Art von Ergebnismenge das PDO zurückgibt, z. B. PDO::FETCH_ASSOC, das Ihnen die Verwendung von $result['column_name'] ermöglicht, oder PDO::FETCH_OBJ, das ein anonymes Objekt für Sie zurückgibt um $result->column_name

zu verwenden

Sie können die Ergebnisse auch einer bestimmten Klasse (Modell) zuordnen, indem Sie für jede einzelne Abfrage einen Lesemodus festlegen, wie folgt:

Code kopieren Der Code lautet wie folgt:

$query = $db->query('SELECT * FROM `foods`');
$foods = $query->fetchAll(PDO::FETCH_CLASS, 'Food');

PDO::ATTR_ERRMODE

Wir haben dies bereits oben erklärt, aber Leute, die TryCatch mögen, müssen Folgendes verwenden: PDO::ERRMODE_EXCEPTION. Wenn Sie aus irgendeinem Grund eine PHP-Warnung auslösen möchten, verwenden Sie PDO::ERRMODE_WARNING.

PDO::ATTR_TIMEOUT

Wenn Sie sich Sorgen über die Ladezeit machen, können Sie dieses Attribut verwenden, um eine Zeitüberschreitung für Ihre Abfrage in Sekunden anzugeben. Beachten Sie, dass bei Überschreitung der von Ihnen festgelegten Zeit standardmäßig eine E_WARNING-Ausnahme ausgelöst wird, es sei denn, PDO:: ATTR_ERRMODE wurde geändert.

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