PDOStatement::execute

Executes a prepared statement

&reftitle.description; public `bool` `PDOStatement::execute` `array` `input_parameters`

Execute the prepared statement. If the prepared statement included parameter markers, you must either:

- call `PDOStatement::bindParam` to bind PHP variables to the parameter markers: bound variables pass their value as input and receive the output value, if any, of their associated parameter markers

- or pass an array of input-only parameter values

&reftitle.parameters;

`input_parameters`

- An array of values with as many elements as there are bound parameters in the SQL statement being executed. All values are treated as `PDO::PARAM_STR`.

  You cannot bind multiple values to a single parameter; for example, you cannot bind two values to a single named parameter in an IN() clause.

  You cannot bind more values than specified; if more keys exist in `input_parameters` than in the SQL specified in the `PDO::prepare`, then the statement will fail and an error is emitted.

&reftitle.returnvalues;

&return.success;

&reftitle.changelog;

&Version; | &Description;
5.2.0 | The keys from `input_parameters` must match the ones declared in the SQL. Before PHP 5.2.0 this was silently ignored.

&reftitle.examples;

### Execute a prepared statement with bound variables

    <?php
    /* Execute a prepared statement by binding PHP variables */
    $calories = 150;
    $colour = 'red';
    $sth = $dbh->prepare('SELECT name, colour, calories
        FROM fruit
        WHERE calories < :calories AND colour = :colour');
    $sth->bindParam(':calories', $calories, PDO::PARAM_INT);
    $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
    $sth->execute();
    ?>

### Execute a prepared statement with an array of insert values (named parameters)

    <?php
    /* Execute a prepared statement by passing an array of insert values */
    $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));
    ?>

### Execute a prepared statement with an array of insert values (placeholders)

    <?php
    /* Execute a prepared statement by passing an array of insert values */
    $calories = 150;
    $colour = 'red';
    $sth = $dbh->prepare('SELECT name, colour, calories
        FROM fruit
        WHERE calories < ? AND colour = ?');
    $sth->execute(array($calories, $colour));
    ?>

### Execute a prepared statement with question mark placeholders

    <?php
    /* Execute a prepared statement by binding PHP variables */
    $calories = 150;
    $colour = 'red';
    $sth = $dbh->prepare('SELECT name, colour, calories
        FROM fruit
        WHERE calories < ? AND colour = ?');
    $sth->bindParam(1, $calories, PDO::PARAM_INT);
    $sth->bindParam(2, $colour, PDO::PARAM_STR, 12);
    $sth->execute();
    ?>

### Execute a prepared statement using array for IN clause

    <?php
    /* Execute a prepared statement using an array of values for an IN clause */
    $params = array(1, 21, 63, 171);
    /* Create a string for the parameter placeholders filled to the number of params */
    $place_holders = implode(',', array_fill(0, count($params), '?'));

    /*
        This prepares the statement with enough unnamed placeholders for every value
        in our $params array. The values of the $params array are then bound to the
        placeholders in the prepared statement when the statement is executed.
        This is not the same thing as using PDOStatement::bindParam() since this
        requires a reference to the variable. PDOStatement::execute() only binds
        by value instead.
    */
    $sth = $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
    $sth->execute($params);
    ?>

&reftitle.notes;

Some drivers require to close cursor before executing next statement.

&reftitle.seealso;

- `PDO::prepare`
- `PDOStatement::bindParam`
- `PDOStatement::fetch`
- `PDOStatement::fetchAll`
- `PDOStatement::fetchColumn`