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 記号定数を指定すると、数値の配列だけを受け取れます。

Open Source Web Architecture Top

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