「PHPとデータベース - PDO」の版間の差分

ナビゲーションに移動 検索に移動
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>

案内メニュー