指定された変数名にパラメータをバインドする

# PDOStatement::bindParam

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

PDOStatement::bindParam — 指定された変数名にパラメータをバインドする

### 説明

public function PDOStatement::bindParam(
string|int `$param`,
mixed `&$var`,
int `$type` = `PDO::PARAM_STR`,
int `$maxLength` = 0,
mixed `$driverOptions` = `null`
): bool

準備された SQL ステートメント中で、 対応する名前もしくは疑問符プレースホルダにパラメータをバインドします。 PDOStatement::bindValue() と異なり、 変数は参照としてバインドされ、PDOStatement::execute() がコールされたときのみ評価されます。

ほとんどのパラメータは入力パラメータです。つまり、クエリを構築する際、 パラメータは読み込み専用で使用されます(とはいえ、 `type` によってはキャストされる可能性もあります)。 いくつかのドライバは、出力パラメータとしてデータを返す ストアドプロシージャの実行をサポートしており、 またいくつかのドライバは、データを渡し更新された値を受け取る、 といった入出力パラメータもサポートしています。

### パラメータ

`param`

  パラメータ ID を指定します。名前付けされたプレースホルダを使った文に 対しては、:name 形式のパラメータ名となります。 疑問符プレースホルダを使った文に対しては、1 から始まるパラメータの 位置となります。

`var`

  SQL ステートメントパラメータにバインドする PHP 変数名を指定します。

`type`

  パラメータに対して `PDO::PARAM_*` 定数 を使った明示的なデータ型を指定します。 ストアドプロシージャからの INOUT パラメータの場合、 `type` パラメータに `PDO::PARAM_INPUT_OUTPUT` ビットを設定するためにビット OR を使用してください。

`maxLength`

  データ型の長さを指定します。パラメータがストアドプロシージャからの OUT パラメータであることを示す場合、 明示的に長さを設定しなければなりません。 この値は、`type` パラメータに `PDO::PARAM_INPUT_OUTPUT` を指定した場合のみ意味があります。

`driverOptions`

### 戻り値

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

### エラー / 例外

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

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

### 例

例1 名前付けされたプレースホルダを用いてプリペアドステートメントを実行する

    <?php
    /* バインドされた PHP 変数によってプリペアドステートメントを実行する */
    $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);
    $sth->execute();
    ?>

例2 疑問符プレースホルダを用いてプリペアドステートメントを実行する

    <?php
    /* バインドされた 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);
    $sth->execute();
    ?>

例3 INOUT パラメータを持つストアドプロシージャをコールする

    <?php
    /* INOUT パラメータを持つストアドプロシージャをコールする */
    $colour = 'red';
    $sth = $dbh->prepare('CALL puree_fruit(?)');
    $sth->bindParam(1, $colour, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT, 12);
    $sth->execute();
    print "After pureeing fruit, the colour is: $colour";
    ?>

### 参考

- PDO::prepare() - 文を実行する準備を行い、文オブジェクトを返す
- PDOStatement::execute() - プリペアドステートメントを実行する
- PDOStatement::bindValue() - 値をパラメータにバインドする

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