プリペアドステートメントを実行する

# PDOStatement::execute

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

PDOStatement::execute — プリペアドステートメントを実行する

### 説明

public function PDOStatement::execute(?array `$params` = `null`): bool

プリペアドステートメントを実行します。 もし、プリペアドステートメントがパラメータマーカを含む場合、次のいずれかを行わなければなりません。

- パラメータマーカに PHP 変数や値を(それぞれ)バインドするため PDOStatement::bindParam() や PDOStatement::bindValue() をコールする。 関連づけされたパラメータマーカがあれば、バインドされた変数は入力値を渡す もしくは出力値を受け取ります。

- あるいは、入力専用のパラメータ値の配列を渡す

### パラメータ

`params`

  実行される SQL 文の中のバインドパラメータと同数の要素からなる、 値の配列。すべての値は `PDO::PARAM_STR` として扱われます。

  ひとつのパラメータに対して複数の値をバインドすることはできません。 例えば、IN() 句の中のひとつのパラメータに対して 2 つの値をバインドすることはできません。

  指定した数よりも多い値をバインドすることはできません。 `params` のキーが PDO::prepare() で指定した SQL にある数より多い場合は、 ステートメントが失敗してエラーが発生します。

### 戻り値

成功した場合に `true` を、失敗した場合に `false` を返します。

### エラー / 例外

`PDO::ATTR_ERRMODE` が `PDO::ERRMODE_WARNING` に設定されていた場合、`E_WARNING` レベルのエラーが発生します。

`PDO::ATTR_ERRMODE` が `PDO::ERRMODE_EXCEPTION` に設定されていた場合、PDOException がスローされます。

### 例

例1 変数や値のバインドを伴うプリペアドステートメントの実行

    <?php
    /* 変数や値のバインドを伴うプリペアドステートメントの実行 */
    $calories = 150;
    $colour = 'gre';
    $sth = $dbh->prepare('SELECT name, colour, calories
        FROM fruit
        WHERE calories < :calories AND colour LIKE :colour');
    $sth->bindParam('calories', $calories, PDO::PARAM_INT);
    /* 名前の前にも、コロン ":" を付けることができます(オプション) */
    $sth->bindValue(':colour', "%$colour%");
    $sth->execute();
    ?>

例2 名前付きの値を伴うプリペアドステートメントの実行

    <?php
    /* 入力値の配列を伴うプリペアドステートメントの実行 */
    $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));
    /* 配列のキーの前にも、コロン ":" を付けることができます(オプション) */
    $sth->execute(array(':calories' => $calories, ':colour' => $colour));
    ?>

例3 位置を指定した値を伴うプリペアドステートメントの実行

    <?php
    /* 入力値の配列を伴うプリペアドステートメントの実行 */
    $calories = 150;
    $colour = 'red';
    $sth = $dbh->prepare('SELECT name, colour, calories
        FROM fruit
        WHERE calories < ? AND colour = ?');
    $sth->execute(array($calories, $colour));
    ?>

例4 位置を指定したプレースホルダに、値をバインドした形でのプリペアドステートメントの実行

    <?php
    /* バインド変数を伴うプリペアドステートメントの実行 */
    $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();
    ?>

例5 IN 句で配列を使うプリペアドステートメントの実行

    <?php
    /* IN 句で配列を使うプリペアドステートメントの実行 */
    $params = array(1, 21, 63, 171);
    /* パラメータのプレースホルダ用の文字列を、パラメータ数に合わせて作ります */
    $place_holders = '?' . str_repeat(', ?', count($params) - 1);

    /*
        これは、配列 $params のすべての値のための名前なしプレースホルダを含む
        ステートメントを準備します。配列 $params の値をそこにバインドし、それから
        ステートメントを実行します。これは PDOStatement::bindParam() を使うのとは
        違います。こちらの場合は変数への参照が必要になるからです。
        PDOStatement::execute() は、単に値だけをバインドします。
    */
    $sth = $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
    $sth->execute($params);
    ?>

### 注意

> 注意:

> ドライバによっては、次のステートメントを実行する前に カーソルを閉じ なければならないものもあります。

### 参考

- PDO::prepare() - 文を実行する準備を行い、文オブジェクトを返す
- PDOStatement::bindParam() - 指定された変数名にパラメータをバインドする
- PDOStatement::fetch() - 結果セットから次の行を取得する
- PDOStatement::fetchAll() - 結果セットから、残っている行を取得する
- PDOStatement::fetchColumn() - 結果セットの次行から単一カラムを返す

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open