PDOStatement::execute

(PHP 5 >= 5.1.0, PHP 7, PECL pdo >= 0.1.0)

PDOStatement::execute Führt ein Prepared Statement aus

Beschreibung

public PDOStatement::execute ([ array $input_parameters ] ) : bool

Führt das Prepared Statement aus. Falls das Prepared Statement Parameter-Marker enthält, muss entweder:

  • PDOStatement::bindParam() und/oder PDOStatement::bindValue() aufgerufen werden, um Variablen beziehungsweise Werte an die Parameter-Marker zu binden. Gebundene Variablen geben ihren Wert als Eingabe und ihnen wird, falls zutreffend, der Ausgabewert der zugehörigen Parameter-Marker zugewiesen.

  • oder ein Array mit Nur-Eingabe-Parameterwerten übergeben werden

Parameter-Liste

input_parameters

Ein Array mit Werten in gleicher Anzahl wie der Anzahl gebundener Parameter im auszuführenden SQL-Statement. Alle Werte werden als PDO::PARAM_STR behandelt.

Für einen einzelnen Paramter können nicht mehrere Werte zugeordnet werden; zum Beispiel ist es nicht gestattet, zwei Werte an einen einzelnen benannten Parameter in einer IN()-Klausel zu binden.

Mehr Werte als festgelegt zuzuordnen ist nicht möglich; wenn mehr Parameter in den input_parameters übergeben werden, als in PDO::prepare() definiert wurden, wird das Statement fehlschlagen und ein Fehler wird ausgegeben.

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Changelog

Version Beschreibung
5.2.0 Die Parameternamen der input_parameters müssen mit den im SQL definierten übereinstimmen. Vor PHP 5.2.0 wurde das stillschweigend ignoriert.

Beispiele

Beispiel #1 Ein Prepared Statement mit einer zugewiesener Variable und Wert ausführen

<?php
/* Ein Prepared Statement ausführen, in dem Variable und Wert zugewiesen werden */
$calories 150;
$colour 'gre';
$sth $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour LIKE :colour'
);
$sth->bindParam(':calories'$caloriesPDO::PARAM_INT);
$sth->bindValue(':colour'"%{$colour}%");
$sth->execute();
?>

Beispiel #2 Ein Prepared Statement mit einem Array an Eingabewerten (benannte Parameter) ausführen

<?php
/* Ein Prepared Statement ausführen, indem ein Array an Eingabewerten übergeben wird */
$calories 150;
$colour 'red';
$sth $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour'
);
$sth->execute(array(':calories' => $calories':colour' => $colour));
?>

Beispiel #3 Ein Prepared Statement mit einem Array an Eingabewerten (Platzhalter) ausführen

<?php
/* Ein Prepared Statement ausführen, indem ein Array an Eingabewerten übergeben wird */
$calories 150;
$colour 'red';
$sth $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?'
);
$sth->execute(array($calories$colour));
?>

Beispiel #4 Ein Prepared Statement mit Fragezeichen-Platzhaltern ausführen

<?php
/* Ein Prepared Statement durch das zuordnen von PHP-Variablen ausführen*/
$calories 150;
$colour 'red';
$sth $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?'
);
$sth->bindParam(1$caloriesPDO::PARAM_INT);
$sth->bindParam(2$colourPDO::PARAM_STR12);
$sth->execute();
?>

Beispiel #5 Ein Prepared Statement mit einem Array für eine IN-Klausel ausführen

<?php
/* Führt ein Prepared Statement mit einem Array für eine IN-Klausel aus */
$params = array(12163171);
/* Erstelle einen String für die Parameter-Platzhalter gefüllt bis zur Anzahl Parameter */
$place_holders implode(','array_fill(0count($params), '?'));

/*
    Das bereitet das Statement mit genügend unbenannten Platzhaltern
    für jeden Wert in unserem $params-Array vor. Die Werte aus dem
    $params-Array werden dann an die Platzhalter im Prepared Statement
    gebunden, wenn das Statement ausgeführt wird. Das ist nicht das
    gleiche wie PDOStatement::bindParam() zu verwenden, weil dies eine
    Referenz zur Variable benötigt. PDOStatement::execute() ordnet
    hingegen nur die Werte zu.
*/
$sth $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
$sth->execute($params);
?>

Anmerkungen

Hinweis:

Manche Treiber verlangen die Ausführung von close cursor, bevor das nächste Statement ausgeführt wird.

Siehe auch