PDO::prepare
  (PHP 5 >= 5.1.0, PHP 7, PHP 8, PHP 8,PECL pdo >= 0.1.0)
PDO::prepare — 
   Bereitet eine Anweisung zur Ausführung vor und liefert ein Anweisungsobjekt
  
  
 
  Beschreibung
  
  
  
   Für jeden Wert, der beim Aufruf von
   PDOStatement::execute() an die Anweisung übergeben
   werden soll, muss ein eindeutiger Platzhalter angegeben werden. Ein
   benannter Platzhalter darf nur dann mehrfach verwendet werden, wenn der
   Emulationsmodus aktiviert ist.
  
  Hinweis: 
   
    Die Platzhalter für die Parameter können nur ein vollständiges
    Datenliteral darstellen. Es ist nicht möglich, einen Teil eines Literals,
    ein Schlüsselwort, einen Bezeichner oder einen beliebigen Teil einer
    Abfrage an einen Parameter zu binden. So können zum Beispiel in einer
    IN()-Klausel einer SQL-Anweisung nicht mehrere Werte an einen einzigen
    Parameter gebunden werden.
   
  
  
   Mittels PDO::prepare() und
   PDOStatement::execute() kann der Treiber bei
   Anweisungen, die mehrfach mit unterschiedlichen Parameterwerten ausgeführt
   werden, die Leistung einer Anwendung optimieren, indem er die
   Zwischenspeicherung des Abfrageplans und der Metainformationen auf Client-
   und/oder Serverseite aushandelt. Außerdem trägt dies dazu bei, Angriffe
   durch SQL-Injection zu verhindern, weil die Parameter nicht mehr manuell
   maskiert und in Anführungszeichen gesetzt werden müssen.
  
  
   Bei Treibern, die diese nicht unterstützen, emuliert PDO vorbereitete
   Anweisungen/gebundene Parameter und kann außerdem benannte oder mit
   Fragezeichen versehene Parametermarkierungen in eine geeignetere Form
   umwandeln, wenn der Treiber zwar die eine, nicht aber die andere Form
   unterstützt.
  
  Hinweis: 
   
    Der Parser, der für emulierte vorbereitete Anweisungen verwendet wird und
    die benannten oder durch Fragezeichen angegebenen Parameter umschreibt,
    unterstützt die nicht standardmäßige Maskierung einfacher und doppelter
    Anführungszeichen durch Backslashes. Dies hat zur Folge, dass
    abschließende Anführungszeichen, denen ein Backslash unmittelbar
    vorausgeht, nicht als solche erkannt werden, was dazu führen kann, dass
    Parameter falsch erkannt werden und die vorbereitete Anweisung bei ihrer
    Ausführung fehlschlägt. Um dies zu umgehen, sollten für solche
    SQL-Abfragen keine emulierten vorbereiteten Anweisungen verwendet werden.
    Außerdem sollte ein vom Treiber nativ unterstützter Parameterstil
    verwendet werden, um ein Umschreiben der Parameter zu vermeiden.
   
  
  
   Seit PHP 7.4.0 können Fragezeichen durch Verdoppeln maskiert werden. Das
   bedeutet, dass die Zeichenkette ?? beim Senden der
   Abfrage an die Datenbank in ? übersetzt wird.
  
  
 
  Parameter-Liste
  
   
    
     - query
- 
      
       Dies muss eine für den jeweiligen Datenbankserver gültige Vorlage für
       eine SQL-Anweisung sein.
       
- options
- 
      
       Dieses Array enthält ein oder mehrere Schlüssel=>Wert-Paare, um die
       Werte der Attribute des von dieser Methode zurückgegebenen
       PDOStatement-Objekts zu setzen. Am häufigsten wird dies verwendet, um
       den Wert von PDO::ATTR_CURSORfür einen
       scrollbaren Cursor aufPDO::CURSOR_SCROLLzu
       setzen. Einige Treiber haben treiberspezifische Optionen, die während
       der Vorbereitung gesetzt werden können.
 
 
 
  Rückgabewerte
  
   Wenn der Datenbankserver die Anweisung erfolgreich vorbereitet hat, gibt
   PDO::prepare() ein
   PDOStatement-Objekt zurück. Schlägt die Vorbereitung
   fehl, gibt PDO::prepare() false zurück oder löst
   eine PDOException aus (abhängig von der
   Fehlerbehandlung).
  
  Hinweis: 
   
    Da emulierte vorbereitete Anweisungen nicht mit dem Datenbankserver
    kommunizieren, überprüft PDO::prepare() die
    Anweisung nicht.
   
  
  
 
 
  Beispiele
  
   
Beispiel #1 Vorlage für eine SQL-Anweisung mit benannten Parametern
    
<?php
/* Ausführen einer vorbereiteten Anweisung durch Übergabe eines Arrays von Werten */
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);
$sth->execute(['calories' => 150, 'colour' => 'red']);
$red = $sth->fetchAll();
/* Den Array-Schlüsseln kann auch ein Doppelpunkt ":" vorangestellt werden (optional) */
$sth->execute([':calories' => 175, ':colour' => 'yellow']);
$yellow = $sth->fetchAll();
?>
     
   
    Beispiel #2 Vorlage für eine SQL-Anweisung mit Fragezeichen als Platzhalter
    
<?php
/* Ausführen einer vorbereiteten Anweisung durch Übergabe eines Arrays von Werten */
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?');
$sth->execute([150, 'red']);
$red = $sth->fetchAll();
$sth->execute([175, 'yellow']);
$yellow = $sth->fetchAll();
?>
     
    
   
    Beispiel #3 Vorlage für eine SQL-Anweisung mit maskierten Fragezeichen
    
<?php
/* Hinweis: dies ist nur bei PostgreSQL-Datenbanken möglich */
$sth = $dbh->prepare('SELECT * FROM issues WHERE tag::jsonb ?? ?');
$sth->execute(['feature']);
$featureIssues = $sth->fetchAll();
$sth->execute(['performance']);
$performanceIssues = $sth->fetchAll();
?>