12,964
回編集
(→持続的な接続) |
|||
344行目: | 344行目: | ||
<br> | <br> | ||
==== PDO::executeメソッド ==== | ==== PDO::executeメソッド ==== | ||
PDO:: | <code>PDO::prepare</code>メソッド → <code>PDOStatement::bindValue</code>メソッド → <code>PDOStatement::execute</code>メソッドの3ステップでクエリを実行する。<br> | ||
ユーザ入力からクエリを動的に作成する場合、プリペアドステートメントとプレースホルダを使用する。<br> | ユーザ入力からクエリを動的に作成する場合、プリペアドステートメントとプレースホルダを使用する。<br> | ||
* プレースホルダ | * プレースホルダ | ||
350行目: | 350行目: | ||
*: プレースホルダには2種類あり、<u>疑問符プレースホルダを使用する方法</u>と<u>名前付きプレースホルダ使用する方法</u>がある。 | *: プレースホルダには2種類あり、<u>疑問符プレースホルダを使用する方法</u>と<u>名前付きプレースホルダ使用する方法</u>がある。 | ||
*: これらを混ぜて使用する場合はエラーとなる。 | *: これらを混ぜて使用する場合はエラーとなる。 | ||
* プリペアドステートメント | * プリペアドステートメント | ||
*: プレースホルダを使用するために作成する。 | *: プレースホルダを使用するために作成する。 | ||
<br> | <br> | ||
372行目: | 372行目: | ||
$stmt->execute(); | $stmt->execute(); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | |||
* 名前付きプレースホルダ | |||
*: <code>:</code>(コロン)を先頭に付加して、半角英数字とアンダースコアにて構成する。 | |||
*: バインド時の先頭は、<code>:</code>(コロン)は省略できる。 | |||
*: エミュレーションが有効の場合、明示的なキャストが必要である。 | |||
<syntaxhighlight lang="php"> | |||
// エミュレーションが有効の場合 | |||
$stmt = $pdo->prepare('SELECT * FROM users WHERE age = :age AND gender = :gender'); | |||
$stmt->bindValue(':age', (int)$age, PDO::PARAM_INT); | |||
$stmt->bindValue(':gender', $gender); | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// バインド時において、先頭の:(コロン)を省略する場合 | |||
$stmt->bindValue('gender', $gender); | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
// IDが20で年齢も20歳の人を取得 | |||
$n = 20; | |||
$stmt = $pdo->prepare('SELECT * FROM users WHERE age = :n AND id = :n'); // エミュレーションが有効の場合のみ、同名のプレースホルダを複数使用できる | |||
$stmt->bindValue(':n', (int)$age, PDO::PARAM_INT); | |||
$stmt->execute(); | |||
</syntaxhighlight> | |||
<br> | |||
なお、 値を即時にバインドせずに、変数を参照的にバインドしておき、実行時に値をバインドする<code>PDOStatement::bindParam</code>メソッドも存在するが、<br> | |||
<code>PDOStatement::bindParam</code>メソッドを使用する必要はない。<br> | |||
エミュレーションが有効の場合、実行後にバインドした変数が文字列型に変換する仕様もあるので、注意すること。<br> | |||
<br><br> | <br><br> | ||