PDOStatement::execute

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

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

説明

publicPDOStatement::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_ERRMODEPDO::ERRMODE_WARNING に設定されていた場合、E_WARNING レベルのエラーが発生します。

PDO::ATTR_ERRMODEPDO::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

$params = array(1, 21, 63, 171);

$place_holders = implode(',', array_fill(0, count($params), '?'));


$sth = $dbh->prepare("SELECT id, name FROM contacts WHERE id IN ($place_holders)");
$sth->execute($params);
?>

注意

注意:

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

参考

To Top