PHP7でSQLite3を使うときの基本的な手法を記しておく。
PHPの設定
PHP7でSQLite3を使うためには、SQLite3の拡張機能が有効になっていなければならない。自分で構築した環境であるならPHP.iniを開いて次の記述のコメントアウトを解除しておく。
extension=sqlite3
レンタルサーバーなどではphpinfo()関数で有効無効を確認できる──はず……曖昧な言い方なのは、私が使っているサービスではphpinfo()が無効化されているからだ。まあ、後述する方法でデータベースの作成と接続等を試してみてればわかるはずだ。
データベースの作成と接続
古いバージョンのPHPはSQLiteを扱う関数が個別に用意されていたが、新しいバージョンではSQLite3クラスを通じてオブジェクト指向的にデータベースを操作する形に変わったようだ。
“mydatabase.db”というSQLite3データベースを扱う場合、次のようにインスタンスを作成する。
$db = new SQLite3('mydatabase.db');
このとき’mydatabase.db’が既に存在すればそれに接続し、なければ新たにファイルが作成される。
SQLite3クラスを継承して独自クラスを作ることもできる。
class MyDB extends SQLite3 {
//コンストラクタ
function __construct() {
$this->open('mydatabase.db');
}
}
$db = new MyDB();
データベースから切断するときはclose()メソッドを実行しよう。
$db->close();
SQLの実行(INSERT UPDATE DELETE他)
データの挿入(INSERT)、更新(UPDATE)、削除(DELETE)等の結果を返さないSQLの実行はexec()メソッドを使う。
$db = new SQLite3('mydatabase.db');
$sql = "UPDATE table1 SET column1=1";
$db->exec($sql);
$db->close();
query()メソッドでも結果を返さないSQLを実行できる。この場合、メソッドの戻り値で実行結果の成否を確認できる(成功=true、失敗=false)。
SQLの実行(SELECT)
結果を返すSQLはquery()メソッドを使用する
$sql = "SELECT * FROM table1";
$result = $db->query($sql);
結果はSQLite3Resultというオブジェクトで返ってくる。
中身を取り出すにはfetchArray()メソッドを使う。fetchArray()の戻り値はカラムと値がペアになった配列で、カラム名をキーとした連想配列、数値添字配列どちらでも値を取り出すことができる(fetchArray()の引数でどちらの配列で受け取るか指定が可能。デフォルトでは両方)。
$db = new SQLite3('mydatabase.db');
$sql = "SELECT * FROM table1";
$result = $db->query($sql);
while ($row = $result->fetchArray()) {
echo 'column1 : ' . $row['column1'] . "\n";
echo 'column2 : ' . $row['column2'] . "\n";
}