作成したPHPスクリプトを配布するとき、データベースのセットアップが面倒な場合があります。
特に、掲示板やアンケートなどのちょとしたフリーPHPスクリプトを作成して不特定多数のユーザーにダウンロードしてもらう場合、データベースやテーブルの作成など、データベースのインストールを意識せずに使い始めることができれば便利です。
SQLiteとCREATE TABLE IF NOT EXISTSでデータベースを“自動セットアップ”
そのような設計が良いのか悪いのかは別にして、データベースの自動セットアップのヒントになるのがSQLiteとCREATE TABLE IF NOT EXISTSです。
データベースサーバーを使わない「SQLite」
SQLiteはPHP5から標準で使用可能なデータベースエンジンで、データベースサーバーを使わない手軽さが大きなメリットです(データベースに接続するというよりも、データベースファイルを開くイメージ)。
SQLiteを使うPHPスクリプトでは、MySQLのように事前にデータベースサーバーを稼動し
ておく必要はありません。実行時に、指定されたデータベースファイルが存在しなければ、新たに作成されます。
※SQLiteのメリットについて詳しくは、「SQLite入門」も参考にしてください。
テーブルが既存の場合は作成しない「CREATE TABLE IF NOT EXISTS」
CREATE TABLE IF NOT EXISTSは、テーブルを作成するCREATE TABLEについて、「そのテーブルが存在しなければ」という条件を付加したものです。
初回実行時はテーブルが作成され、2回目以降はテーブル作成されないので、エラーで処理が停止しません。
このようにSQLiteとCREATE TABLE IF NOT EXISTSを組み合わせることで、ユーザーにデータベースのセットアップを意識させず(暗黙のうちにセットアップされる)に、PHPスクリプトを使い始めてもらうことができます。
PHPスクリプトの構成によってはベストの解決策とは限りませんが、ちょっとしたアプリケーションでは有効な手法です。
次のPHPスクリプトは、テーブルにデータを格納し、そのデータを表示する単純なデータベーススクリプトです。
実行前にデータベースサーバーの稼動やデータベース(test.sqliteというファイル)の作成、テーブル(t1テーブル)作成などの手間がかからない点がポイントです。
<?php // データベースに接続 $dsn = "sqlite:test.sqlite"; $conn = new PDO($dsn); // テーブルの作成 $sql = "CREATE TABLE IF NOT EXISTS t1(id INTEGER PRIMARY KEY, name)"; $stmt = $conn->prepare($sql); $stmt->execute(); // データの追加 $sql = "INSERT INTO t1(name) VALUES('鈴木一郎')"; $stmt = $conn->prepare($sql); $stmt->execute(); // データの取得 $sql = "SELECT * FROM t1"; $stmt = $conn->prepare($sql); $stmt->execute(); // データの一覧表示 while ($row = $stmt->fetch()) { echo $row["name"] . "<br />"; } ?>
○実行結果