MW211 EXIT

devlog
PDO/SQL発行のまとめ
2011年11月29日
まずは、以下のような感じでオブジェクトを作る。
#「…」の部分は各環境で違うので省略
┌──────────────────────────────────────┐
│$dbh = new PDO(…);                                                         │
└──────────────────────────────────────┘

その後、ざっと以下のような方法がある
┌──────────────────────────────────────┐
│$dbh->exec('DELETE FROM 表;');                                              │
├──────────────────────────────────────┤
│foreach ($dbh->query('SELECT * FROM 表') as $row) {                         │
├──────────────────────────────────────┤
│$sth = $newPDO->prepare('DELETE FROM 表 WHERE ID = :id;');                  │
│$sth->bindValue(':id', $id, PDO::PARAM_INT);                                │
│$sth->execute();                                                            │
├──────────────────────────────────────┤
│$sth = $newPDO->prepare('SELECT * FROM 表 WHERE ID = :id;');                │
│$sth->bindValue(':id', $id, PDO::PARAM_INT);                                │
│$sth->execute();                                                            │
│foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $row) {                        │
└──────────────────────────────────────┘

まず、exec()メソッド、単純に更新系SQLを実行したい場合にはこちらで。
戻り値は処理結果(何件作用したか)だけなので、SELECT文の参照系SQLには使えない。

参照系SQLの場合は、query()メソッドで。
戻り値に行毎に配列でデータが返ってくる。

SQL文中に変数を使いたい場合は、prepare()メソッドを使う。
これでオブジェクトを作り、bindValue()で変数を指定し、execute()で実行。
fetchAll()を使うとデータを取得できる。(fetch()なら一件ずつ取得)
更新系SQLなら、execute()までで終わり。

ややこしいので、PDOを使うならprepare()メソッドを使う方式に統一して、
気が向いたらショートカット的にexec()やquery()を使うって感じだろうか。
#query()はexec()も兼ねているっぽいけど…
分類:PDO