PHPでSQLite3を使う
PHPでSQLite3を使う
SQLite3とは、簡単に言えばサーバーを必要としないデータベースのこと。
(PHP 5 >= 5.3.0, PHP 7)で使える。
インストール
apt-get install php5-sqlite
データベースにアクセスする
ファイルがなければ作られる。
<?php $db = new SQLite3(filename); ?>
クエリを実行する
public bool SQLite3::exec ( string $query )
でクエリを実行できる。
成功したらtrue、失敗したらfalseが返る。
<?php $db->exec("CREATE TABLE fruits (id, name)"); $db->exec("INSERT INTO fruits VALUES (1, 'apple')"); ?>
SELECT文を実行する
execでSELECT文を実行してもデータは抜き出せないので、SELECT文を使いたい時は、
public SQLite3Result SQLite3::query ( string $query )
SQLIte3Resultから抜き出したカラム(行)を得るには、
public array SQLite3Result::fetchArray ([ int $mode = SQLITE3_BOTH ] )
引数の$modeによって得られる配列の形が変わる。
SQLITE3_ASSOC:文字列のインデックス(カラム名)
SQLITE3_NUM:数字のインデックス(0から始まる)
SQLITE3_BOTH:文字列、数字、両方
<?php $res = $db->query("SELECT * FROM fruits"); var_dump($res->fetchArray()); /* array(4) { [0]=> int(1) ["id"]=> int(3) [1]=> string(4) "apple" ["name"]=> string(4) "apple" } */ ?>
SELECTしたデータを扱う
実はfetchArray()
で取れるのは1行だけなので、SELECTした行を順に取るには、while文で繰り返す必要がある。
<?php $db->exec("INSERT INTO fruits VALUES (2, 'banana')"); $db->exec("INSERT INTO fruits VALUES (3, 'orange')"); $res = $db->query("SELECT * FROM fruits"); while($row = $res->fetchArray()){ print($row["id"] . ", " . $row["name"] . "\n"); } /* 1, apple 2, banana 3, orange */ ?>
fetchArray()とwhile文について
fetchArray()
は1行だけ取り、呼び出す度に次の行を取ってくる。
全部の行を取り終わったらfalse
を返す。
そのためwhileが止まる。
気になったので実際に挙動を確認した。出力は一部省略してある。
<?php $res = $db->query("SELECT * FROM fruits"); for($i = 0; $i < 5; $i++){ var_dump($array = $res->fetchArray()); } /* array(4) { ["name"]=> string(4) "apple" } array(4) { string(3) "banana" } array(4) { ["name"]=> string(7) "orange" } bool(false) <<<<これ array(4) { ["name"]=> string(4) "apple" } */ ?>
ちょっと見にくいが4回目でfalse
が返ってきて、5回目でまた始めに戻った。