Latest web development tutorials
×

PHP Kurs

PHP Kurs PHP Kurze Einführung PHP installieren PHP Grammatik PHP Variable PHP echo/print PHP Datentypen PHP Konstante PHP Schnur PHP Die Betreiber PHP If...Else PHP Switch PHP Feld PHP Sortieren eines Array PHP Superglobals PHP While Verkehr PHP For Verkehr PHP Funktion PHP Magische Variablen PHP Namespaces PHP Objektorientiert

PHP Form

PHP Form PHP Formularauthentifizierung PHP Form - Erforderliche Felder PHP Form - Überprüfung E-Mail und URL PHP Komplette Formularinstanz PHP $_GET Variable PHP $_POST Variable

PHP Erweiterte Tutorial

PHP Mehrdimensionale Arrays PHP Datum PHP enthalten PHP Datei PHP Datei-Upload PHP Cookie PHP Session PHP E-mail PHP Sicherheit E-mail PHP Error PHP Exception PHP Filter PHP Erweiterte Filter PHP JSON

PHP 7 Neue Funktionen

PHP 7 Neue Funktionen

PHP Datenbank

PHP MySQL Kurze Einführung PHP MySQL Verbindung PHP MySQL Erstellen einer Datenbank PHP MySQL Erstellen Sie eine Datentabelle PHP MySQL einfügen von Daten PHP MySQL Legen Sie mehrere Daten PHP MySQL Prepared Statements PHP MySQL Lesen Sie Daten PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX Kurze Einführung AJAX PHP AJAX Datenbank AJAX XML AJAX Echtzeitsuche AJAX RSS Reader AJAX Abstimmung

PHP Referenzhandbuch

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP Bildverarbeitung PHP RESTful

PHP PDO Prepared Statements und Stored Procedures

PHP PDO-Referenzhandbuch PHP PDO - Referenzhandbuch

Viele reifere Datenbanken unterstützen das Konzept der vorbereiteten Anweisungen.

Was ist vorbereitete Anweisungen? Betrachten Sie es als eine kompilierte gewünschte Vorlage SQL ausführen, die variable Parameter angepasst verwenden werden können. Vorbereitete Anweisungen bieten zwei wesentliche Vorteile:

  • Abfrage nur Entschlüssen (oder Vorbehandlung) einmal, sondern kann mehrfach mit den gleichen oder unterschiedlichen Parametern ausgeführt werden. Wenn die Abfrage bereit ist, wird die Datenbank zu analysieren, kompilieren und die Abfrageoptimierungsplan auszuführen. Bei komplexen Abfragen Dieser Vorgang dauert eine lange Zeit, wenn Sie oft mit verschiedenen Parametern die gleiche Abfrage, dann wiederholt werden müssen, verringern wird der Prozess erheblich die Geschwindigkeit der Anwendung. die vorbereitete Anweisung nicht wiederholen analysieren / Kompilierung / Optimierung Zyklus Durch den Einsatz. Kurz gesagt, vorbereitete Anweisungen verwenden weniger Ressourcen und damit schneller zu laufen.
  • Geben Sie Parameter für Prepared Statements müssen keine Anführungszeichen zu verwenden, wird der Treiber automatisch. Wenn die Anwendung nur vorbereitete Anweisungen verwendet, können wir, dass keine SQL-Injection gewährleisten. (Wenn jedoch andere Teile der Abfrage nicht aus dem Eingangs entkommen ist zu bauen, dann ist es immer noch die Gefahr von SQL-Injection).

Vorbereitete Anweisungen so nützlich, dass sie nur Merkmal ist die analoge Verarbeitung, wenn der Fahrer das PDO nicht unterstützt. Dies stellt sicher, dass unabhängig davon, ob die Datenbank eine Funktion hat, kann sichergestellt werden, dass Anwendungen, die die gleichen Datenzugriffsmuster verwendet werden können.

PreparedStatements wiederholte Einführen

Im folgenden Beispiel wird durch den entsprechenden Namen Platzhalter mit dem Namen ersetzen und den Wert eines Einsatzes Abfrage auszuführen

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

//  用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>

PreparedStatements wiederholte Einführen

Im folgenden Beispiel wird mit Namen und Wert? -Platzhalter Ein Insert Abfrage auszuführen.

<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// 插入一行
$name = 'one';
$value = 1;
$stmt->execute();

// 用不同的值插入另一行
$name = 'two';
$value = 2;
$stmt->execute();
?>

Erhalten Sie Daten mit Prepared Statements

Das folgende Beispiel in Form von schlüsselbasierten Zugriff auf Daten, die bereits zur Verfügung gestellt. Die Benutzereingabe wird in Anführungszeichen automatisch eingeschlossen, so besteht keine Gefahr von SQL-Injection-Angriffe.

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>

Wenn der Datenbank-Treiber-Unterstützung, Anwendung kann auch Ein- und Ausgangsparameter Ausgangsparameter binden typischerweise Werte zu erhalten, aus der gespeicherten Prozedur verwendet. Ausgangsparameter zu verwenden, als Eingangsparameter etwas komplizierter zu sein, denn wenn ein Ausgabeparameterbindung, die Parameter einer bestimmten Länge kennen. Wenn der Wert für den Parameter größer als die verbindlichen Empfehlungen der Länge ist, wird es einen Fehler.

Aufrufen einer gespeicherten Prozedur mit einem Ausgabeparameter

<?php
$stmt = $dbh->prepare("CALL sp_returns_string(?)");
$stmt->bindParam(1, $return_value, PDO::PARAM_STR, 4000); 

// 调用存储过程
$stmt->execute();

print "procedure returned $return_value\n";
?>

Sie können auch beide Ein- und Ausgangswerte der Parameter angeben, ist die Syntax ähnlich den Ausgabeparametern. Im nächsten Beispiel wird die Zeichenkette "Hallo" an die gespeicherte Prozedur übergeben, wenn die gespeicherte Prozedur zurückkehrt, hallo mit dem Rückgabewert der gespeicherten Prozedur ersetzt wird.

Mit Ein- / Ausgangsparameter eine gespeicherte Prozedur aufzurufen

<?php
$stmt = $dbh->prepare("CALL sp_takes_string_returns_string(?)");
$value = 'hello';
$stmt->bindParam(1, $value, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 4000); 

// 调用存储过程
$stmt->execute();

print "procedure returned $value\n";
?>

Ungültige Verwendung von Platzhalter

<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE '%?%'");
$stmt->execute(array($_GET['name']));

// 占位符必须被用在整个值的位置
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name LIKE ?");
$stmt->execute(array("%$_GET[name]%"));
?>

PHP PDO-Referenzhandbuch PHP PDO - Referenzhandbuch