Php/docs/pdostatement.execute

提供:Dev Guides
< Php
移動先:案内検索

PDOStatement::execute

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

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


説明

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

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

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


パラメータ

input_parameters

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

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

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


返り値

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


例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));?>

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

注意

注意:

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

参考