小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


PHPのSQLite3クラスを使ってSQLite3を操作する

前回までのエントリで、Mac OS X 10.6 Snow Leopard上でPHP5とSQLite3を動かすことができるようになったので、今回はPHPからSQLite3を操作してみました。
前回のエントリは、こちら。

僕はPHPのコードをほとんど書いたことがありません。なので、以下に記載するコードは自信がありません。とりあえず動くレベルということで見てください。
以下のサイトを参考に、試行錯誤しながら動かしてみました。

SQLite3に接続する

SQLite3に接続するには、SQLite3オブジェクトの引数にデータベースファイル名を指定します。

$db = new SQLite3('hoge.db');

データベースへの接続ではエラーが発生する可能性があるので、例外処理をするとしたら、こんな感じです。

try {
  $db = new SQLite3('hoge.db');
} catch (Exception $e) {
  print 'DBへの接続でエラーが発生しました。<br>';
  print $e->getTraceAsString();
}
SQLite3との接続をクローズする

SQLite3との接続をクローズする場合は、SQLite3オブジェクトのclose関数を使用します。

$db = new SQLite3('hoge.db');
$db->close();
select文を発行して、結果を表示する

select文を発行する前の準備として、データベースにデータを用意します。以下のようにターミナルからSQLite3に接続して、データベースにデータを格納します。

sqlite> create table hoge(id integer, name varchar(16));
sqlite> insert into hoge values('1', 'userA');
sqlite> select * from hoge;
1|userA

select文を実行する場合には、SQLite3オブジェクトのquery関数を使用します。query関数は、戻り値としてSQLite3Resultオブジェクトを返します。
SQLite3ResultオブジェクトにはfetchArray()というクエリの結果を連想配列にして返してくれる関数があるので、これを使って配列を取得します。以下のコードはfetchArray()の結果として取得した配列をダンプしています。

$results = $db->query('SELECT * FROM hoge');
var_dump($results->fetchArray());
>>array(4) { [0]=>  int(1) ["id"]=>  int(1) [1]=>  string(5) "userA" ["name"]=>  string(5) "userA" } 
selectした結果を1行ずつ出力する

クエリの結果が0件の場合は、fetchArray()関数がfalseを返すので、whileブロック内のコードは実行されません。

$results = $db->query('SELECT * FROM hoge');
while ($row = $results->fetchArray()) {
  print $row['id'];   // $row[0];でも可
  print $row['name']; // $row[1];でも可
  print '<br>';
}
あとがき

本当は、insertやupdateなどもやりたかったのですが、時間がなかったのでここまでにします。後日追記します。