| |
SQLite3拡張モジュールを使う
PHP5からRDBMSのSQLiteが内蔵され、中小規模のデータベースを含むWebシステムが開発しやすくなりました。
PHPからSQLiteにアクセスするには「SQLite3拡張モジュール」か後述の「PDO」を利用します。
SQLite3モジュールもPDOも記法がよく似ているため、
基本はPDOを使えば良いと思いますけれども、一応SQLite3モジュールの方を先にご紹介します。
なお、使っているPHPについているSQLiteのバージョンは、phpinfo()の出力で確認できます。
テーブルを作成するサンプルです。
<html><body>
<?php
// パスを省略すると、このスクリプトと同じ場所に作られます。
$con = new SQLite3('test.db');
$sql = <<<SQL
CREATE TABLE SHITEN(
SHITEN_CODE VARCHAR2(5) NOT NULL,
SHITEN_NAME VARCHAR2(40),
AREA_CODE INT,
ADDRESS VARCHAR2(80),
EMPLOYEE_NUM INT
)
SQL;
$result = $con->query($sql);
if(! $result){
die('SQL発行が失敗しました。' . $con->lastErrorMsg());
}
$con->close();
print('テーブルを作成しました。<br>');
?>
</body></html>
|
データを登録するサンプルです。
<html><body>
<?php
$con = new SQLite3('test.db');
$sql = <<<SQL
INSERT INTO SHITEN(
SHITEN_CODE, SHITEN_NAME, AREA_CODE, ADDRESS, EMPLOYEE_NUM
) VALUES(:sc, :nm, :ac, :ad, :en);
SQL;
$st = $con->prepare($sql);
if(! $st){
die('SQL発行が失敗しました。' . $con->lastErrorMsg());
}
function query1($con, $st, $sc, $nm, $ac, $ad, $en){
$st->bindValue(":sc", $sc);
$st->bindValue(":nm", $nm);
$st->bindValue(":ac", $ac);
$st->bindValue(":ad", $ad);
$st->bindValue(":en", $en);
$result = $st->execute();
if(! $result){
die('SQL発行が失敗しました。' . $con->lastErrorMsg());
}
}
query1($con, $st, "00100", "札幌", 1, "札幌市中央区南13条西24丁目345", 25);
query1($con, $st, "00120", "旭川", 1, "北海道旭川市四条通19-左29-39", 20);
$con->close();
print('データを登録しました。<br>');
?>
</body></html>
|
データを検索してHTML TABLEに表示するサンプルです。
<html><body>
<style>
table { border: 1px solid #808080; border-collapse: collapse; }
th { border: 1px solid #808080; background: #cccccc; }
td { border: 1px solid #808080; }
</style>
<?php
$con = new SQLite3('test.db');
$sql = <<<SQL
SELECT SHITEN_CODE, SHITEN_NAME, AREA_CODE, ADDRESS, EMPLOYEE_NUM
FROM SHITEN ORDER BY SHITEN_CODE
SQL;
$rset = $con->query($sql);
if(! $rset){
die('SQL発行が失敗しました。' . $con->lastErrorMsg());
}
function showTable($rset){
print("<table>");
$count = 0;
print <<<HEADER
<tr>
<th>支店コード</th><th>支店名称</th><th>地域</th><th>住所</th><th>従業員数</th>
</tr>
HEADER;
while($row = $rset->fetchArray()){
print <<<ROWDATA
<tr>
<td>{$row[0]}</td><td>{$row[1]}</td><td>{$row[2]}</td><td>{$row[3]}</td><td>{$row[4]}</td>
</tr>
ROWDATA;
$count++;
}
print("</table>");
return $count;
}
$count = showTable($rset);
print($count . '件のデータが見つかりました。<br>');
$con->close();
?>
</body></html>
|
データを検索するサンプルをもう一つ載せてみます。
$con = new SQLite3("/the/path/of/testdb");
$sql = <<<SQL
SELECT SHITEN_CODE, SHITEN_NAME, AREA_CODE FROM SHITEN
WHERE AREA_CODE = :area_code ORDER BY SHITEN_CODE
SQL;
$s = $con->prepare($sql);
$s->bindValue(":area_code", "3");
$r = $s->execute();
if($r instanceof SQLite3Result){
while($rset = $r->fetchArray(SQLITE3_NUM)){
print(implode("\t", $rset) . "\n");
}
} else {
die('SQL発行が失敗しました。' . $con->lastErrorMsg());
}
$con->close();
|
検索処理でもこのようにbindValue()でバインド変数をパラメータに紐づけできます。
execute()の戻り値は成功ならば SQLite3Result のインスタンス、エラーならばFALSEです。
fetchArrayは通常1行のレコードを数値の配列と連想配列の両方で返しますが、
SQLITE3_NUM 記号定数を指定すると、数値の配列だけを受け取れます。

(first uploaded 2012/07/14 last updated 2017/04/21, MISUMI URANO)
|