Web

PHP から SQLite を使う手順

投稿日:2020年3月17日 更新日:

1. SQLite について

ウェブサイトをつくる際に利用できるデータベースには、たくさんの選択肢があります。リレーショナルデータベースだけでも Oracle、SQL Server、PostgreSQL、MySQL などありますし、それ以外のタイプのデータベース(例:NoSQL)も増えてきています。

上に挙げたリレーショナルデータベースのほとんどは、データベースのサーバープログラムが常時稼働し、利用する側(クライアント)からサーバーにアクセスして利用する形態です。サーバーとして動作させるための設定も大変ですし、データベース自体の設定も複雑です。

本記事で取り上げる SQLite もリレーショナルデータベースではありますが、仕組みが大きく違います。1つのデータベースは、ただの1ファイルであり、プログラムでそのファイルにアクセスしてデータを操作するだけです。サーバーとして何かが動くことはありませんし、何かを設定する必要もありません。

この便利な SQLite はスマホのアプリ等ではよく使われているのですが、ウェブサイトでも、小規模であればかなり便利に使えます。サーバー側で何かしらのデータを保存しておきたい場合には、有力な候補になるでしょう。

本記事では、ウェブサイトにおいて PHP から SQLite を利用する簡単な手順について説明します。

2. 環境

  • SQLite: 3.7.17
  • PHP: 7.3.14

3. PHP から SQLite を利用するための要件

PHP: 要件 – Manual に説明されています。

  • PHP 7.4.0 以降では、別途 libsqlite (バージョン 3.7.4以上) を導入して利用する(未検証)。
  • それより前のバージョンでは、PHPにバンドルされた libsqlite が利用される。

4. SQLite のデータベースファイルを用意する

sqlite3 コマンドを利用

sqlite3 コマンドで、データベースファイルを生成しておきます。

$ sqlite3 {データベースファイル名}

以下は実行例です。

$ sqlite3 ex1.db
SQLite version 3.7.17 2013-05-20 00:56:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table tbl1(one varchar(10), two smallint);
sqlite> insert into tbl1 values('hello', 10);
sqlite> insert into tbl1 values('goodbye', 20);
sqlite> insert into tbl1 values('hi', 105);
sqlite> select * from tbl1;
hello|10
goodbye|20
sqlite>

この例では、ついでに以下のデータを格納したテーブルを作成しています。

テーブル tbl1
レコードNo. カラム「one」 カラム「two」
0 ‘hello’ 10
1 ‘goodbye’ 20
2 ‘hi’ 105

※ 例として実行したSQL文は、Command Line Shell For SQLite を真似ています。

参考

データベースファイルへのアクセスを制限する

データベースファイルは、ウェブ経由でアクセスされないように、ドキュメントルート外に置くかパーミッションを適切に設定します。

5. PHPを使いデータを操作する

SQLite3クラスを利用する方法

SQLite3 クラスを利用して、SQLite のデータベースを操作します。

PHPコード

$db = new SQLite3('ex1.db');
$stmt = $db->prepare('SELECT * FROM tbl1 WHERE two>=:two');
$stmt->bindValue(':two', 15, SQLITE3_INTEGER);
$result = $stmt->execute();
if ($result !== false) {
  while ($arr = $result->fetchArray()) {
    echo '<pre>';
    var_export($arr);
    echo '</pre>';
  }
}
  • SQL文の構築にはプレースホルダが使えます。

出力結果

array (
  0 => 'goodbye',
  'one' => 'goodbye',
  1 => 20,
  'two' => 20,
)
array (
  0 => 'hi',
  'one' => 'hi',
  1 => 105,
  'two' => 105,
)

参考

PDOを利用する方法

PHPコード

try {
  $dbh = new PDO('sqlite:./ex1.db');
  $st = $dbh->prepare('SELECT * from tbl1 WHERE two >= :two');
  $st->execute(array(':two' => 15));
  $rows = $st->fetchall();
  echo '<pre>';
  var_export($rows);
  echo '</pre>';
  $dbh = null;
} catch (PDOException $e) {
    echo "エラー!: " . $e->getMessage() . "<br/>";
}
  • SQL文の構築にはプレースホルダが使えます。

出力結果

array (
  0 => 
  array (
    'one' => 'goodbye',
    0 => 'goodbye',
    'two' => '20',
    1 => '20',
  ),
  1 => 
  array (
    'one' => 'hi',
    0 => 'hi',
    'two' => '105',
    1 => '105',
  ),
)

メモ

  • カラムtwoの値は整数であるのに出力結果では文字列になっています。PDO::ATTR_EMULATE_PREPARES を false にしても整数扱いにならないようです(MySQLなら対応できるはず)。
  • PDO::ATTR_CURSOR や PDO::FETCH_CLASS の指定については未調査。SQLite はこの手のオプションに対応していないことが多そうです。
  • PDOは複数のデータベースに対応しているのが利点の1つであり、データベースを変更することになっても、ソースコードの修正箇所が少なく済みます。しかし実際にデータベースを変更することはあまりないように思いますし、特に SQLite は PDO が用意している機能に対応している部分が少なそうであるため、PDOを利用する意味もだいぶ薄れそうです。

参考

6. おわりに

ウェブサイト(やウェブページ)で手軽に利用できるデータベースが欲しい場合には、SQLite を採用してみてはいかがでしょうか。

SQLite

PHP + SQLite を利用してアクセスカウンターを作る

2020.03.17

7. 参考

📂-Web

執筆者:labo


comment

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

関連記事

Web

インストールが可能になるための最低限のウェブサイト(PWA)を作る

インストールが可能になるための最低限のウェブサイト(PWA)を作る方法について説明します。

Chrome

Chrome で拡張機能を使わずにスクリーンショットを撮る方法

Chrome で拡張機能を使わずにスクリーンショットを撮る方法について説明します。

Let's Encrypt

Let’s Encrypt: ホスト名毎に証明書を分けて発行する

ホスト名毎に証明書を分けて発行すると便利です。

Web

Icons8 の Free Icons を使う手順

Icons8 の Free Icons Icons8 というサイトでは、いろいろな種類の無料素材が提供されています。 今回、そのうちの1つである「アイコン(Free Icons)」を使う手順についての …

CSS

CSS の基礎

目次1. CSS とは?2. CSS のバージョン(分類)Cascading Style Sheets, level 1Cascading Style Sheets, level 2 (CSS2)Ca …