1. このページの目的
PHPからSQLiteを利用する手順について記録する。
実際に本ページで利用してみる。
2. 環境
実験時
- PHP: 7.3.14
- SQLite: 3.7.17
3. PHP から SQLite を使う
要件
- PHP 7.4.0 以降では、別途 libsqlite ≥ 3.7.4 を導入して利用する。
- それより前のバージョンでは、バンドルされた libsqlite が利用される。
(情報元:PHP: 要件 - Manual)
SQLite のファイルを用意する
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>
ついでに、テーブルを1つ作成しておいた。
レコードNo. | one | two |
---|---|---|
0 | 'hello' | 10 |
1 | 'goodbye' | 20 |
2 | 'hi' | 105 |
データベースファイルは、ウェブ経由でアクセスされないように、ドキュメントルート外に置くかパーミッションを適切に設定すること。
(参考:Command Line Shell For SQLite)
4. PHPを使いデータを取得して表示する (SQLite3クラスを利用)
$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>';
}
}
array ( 0 => 'goodbye', 'one' => 'goodbye', 1 => 20, 'two' => 20, )
array ( 0 => 'hi', 'one' => 'hi', 1 => 105, 'two' => 105, )
5. PHPを使いデータを取得して表示する (PDOを利用)
try {
$dbh = new PDO('sqlite:./ex1.db', '', '',
[PDO::ATTR_EMULATE_PREPARES => false]);
$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/>";
}
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 はこの手のオプションに対応していないことが多そう。
6. メモ
- サーバー側でデータを保存しておきたい場合、SQLite は手軽に使えて便利。
- SQLite のデータベースファイルは、ブラウザからアクセス不可のパーミッションで使えるので安全である。