PHP と PDO に関するメモ


PDO はクラス

参考:http://www.php.net/manual/ja/class.pdo.php

PDO は PHP とデータベースサーバの間の接続を表す…とのこと。SQL ステートメントを実行する Query (クエリ) の場合を例に取ると、PDO::query() と表記されている。実際に利用する際は query(); となる。

PDO を利用することで使用しているデータベースの種類を問わず、同じ PDO 関数を使用してクエリ発行やデータ取得が行えるという利点が挙げられている。ただしデータベース固有の関数を実行する場合すべてがサポートされているわけではないし、存在しない機能をエミュレートもできない。プリペアドステートメントについては例外で、ドライバが サポートしていなくても PDO がこの機能をエミュレートします。

参考:http://www.php.net/manual/ja/pdo.prepared-statements.php

接続の際に今回は SQLite 用のドライバを使うので、MySQL などのようにユーザの概念が無いことを思い出すこと。

MySQL の場合 / $memoryDB = new PDO('mysql::memory:', $user, $pass);
SQLite の場合 / $memoryDB = new PDO('sqlite::memory:','' ,'');

終了時には明示的に接続を閉じるのが作法だが、仮に忘れてもスクリプトの終了時には自動で接続がクローズされる仕様になってるみたい。この時、まだ処理が完了していないトランザクションがあれば PDO はデータを守るため自動的にロールバックを行う安全装置みたいなのが付いてる。ただしこの安全装置も PDO::beginTransaction() が宣言されていないと機能しないとあって、手動で単発トランザクションとかしても PDO がトランザクション開始のタイミングを知る余地がないためロールバックも自動で機能しないというロジックに陥るらしい。要するに安全な手法としては Begin して Commit で締めくくって、その間に exec 溜め込んで一括コミットする。このトランザクション処理中にもしもスクリプトが不意に閉じられてもロールバックが働くから中途半端な処理は無かったことにされる。

$dbh->beginTransaction();
$dbh->exec();
$dbh->exec();
$dbh->exec();
$dbh->PDO::commit();

にすればええんやな?Begin してる間はロックされてると、OK、これなら楽勝自信ニキ。

PDOStatement->fetchColumn() — 結果セットの次行から単一カラムを返す。行がもうない場合には FALSE。パラメータは 0 で始まるカラム番号を指定。

とりあえずざっとこんな感じか。あとは PHP に関してちょっと基礎を学んでくる。マニュアルってのを読めば良いのだろうか。

choroimondaze

参考:http://www.php.net/manual/ja/index.php


Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です