12,964
回編集
(→持続的な接続) |
|||
323行目: | 323行目: | ||
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(PDO::ATTR_PERSISTENT => true)); | $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(PDO::ATTR_PERSISTENT => true)); | ||
?> | ?> | ||
</syntaxhighlight> | |||
<br><br> | |||
== クエリの実行 == | |||
==== PDO::queryメソッド ==== | |||
ユーザ入力を伴わないクエリは、PDO::queryメソッドを実行する。<br> | |||
戻り値は、PDOStatementクラスである。<br> | |||
<syntaxhighlight lang="php"> | |||
$stmt = $pdo->query('SELECT * FROM users'); | |||
</syntaxhighlight> | |||
<br> | |||
==== PDO::execメソッド ==== | |||
ユーザ入力を伴わないクエリにおいて、INSERTやUPDATE等を使用してレコードを直接取得する場合、PDO::execメソッドを使用する。<br> | |||
また、結果を必要としない場合においても、PDO::execメソッドを使用すべきである。<br> | |||
<br> | |||
以下の例では、テーブルに存在する全てのレコードを更新して、更新した全てのレコード数を取得している。<br> | |||
<syntaxhighlight lang="php"> | |||
$count = $pdo->exec('UPDATE users SET age = age + 1'); | |||
</syntaxhighlight> | |||
<br> | |||
==== PDO::executeメソッド ==== | |||
PDO::prepareメソッド → PDOStatement::bindValueメソッド → PDOStatement::executeメソッドの3ステップでクエリを実行する。<br> | |||
ユーザ入力からクエリを動的に作成する場合、プリペアドステートメントとプレースホルダを使用する。<br> | |||
* プレースホルダ | |||
*: ユーザ入力を代入する場所として、予め確保するためのもの。 | |||
*: プレースホルダには2種類あり、<u>疑問符プレースホルダを使用する方法</u>と<u>名前付きプレースホルダ使用する方法</u>がある。 | |||
*: これらを混ぜて使用する場合はエラーとなる。 | |||
* プリペアドステートメント: | |||
*: プレースホルダを使用するために作成する。 | |||
<br> | |||
* 疑問符プレースホルダ<br> | |||
*: ?の要素は、1から始まる。<br> | |||
*: <code>PDO::PARAM_STR</code>は省略することができる。<br> | |||
*: エミュレーションが有効の場合、正しくキャストできない場合があるため、文字列以外を扱う時は明示的なキャストが必要である。<br> | |||
*: NULL値に関しては、<code>PDO::PARAM_NULL</code>が暗黙的に使用される。<br> | |||
<syntaxhighlight lang="php"> | |||
// エミュレーションが有効の場合 | |||
$stmt = $pdo->prepare('SELECT * FROM users WHERE gender = ? AND age = ?'); | |||
$stmt->bindValue(1, $gender); | |||
$stmt->bindValue(2, (int)$age, PDO::PARAM_INT); | |||
$stmt->execute(); | |||
// エミュレーションが無効の場合、上記または下記のいずれの記述も可能 | |||
<syntaxhighlight lang="php"> | |||
$stmt = $pdo->prepare('SELECT * FROM users WHERE gender = ? AND age = ?'); | |||
$stmt->bindValue(1, $gender); | |||
$stmt->bindValue(2, $age, PDO::PARAM_INT); | |||
$stmt->execute(); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> |