SQLite3インストールメモ

自宅サーバーで運用していたプロキオン通販案内を使えるねっとに移行するにあたってSQLite3を導入しました。以前はBerkeley DBを使っていました。ネットで情報を収集すると過負荷になるとDBが壊れやすいようなので、今回SQLite3に切り替えました。

今回は使えるねっとVPS環境にSQLite3を構築した際の備忘録です。

使えるねっとVPS環境では始めからSQLite3がインストール済みになっていました。

-bash-3.1$ rpm -qa | grep sqlite
sqlite-3.3.6-2
sqlite-devel-3.3.6-2
php-sqlite2-5.1.6-200705230937
sqlite-3.3.6-2

但しPHPのバージョンが5.1.6だったのでPDOを使わなければなりませんでした。
はじめはphpinfo()を調べると

'./configure' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-curl' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-png' '--with-pspell' '--with-expat-dir=/usr' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-track-vars' '--enable-trans-sid' '--enable-yp' '--enable-wddx' '--with-kerberos' '--enable-ucd-snmp-hack' '--with-unixODBC=shared,/usr' '--enable-memory-limit' '--enable-shmop' '--enable-calendar' '--enable-dbx' '--enable-dio' '--with-mime-magic=/etc/httpd/conf/magic' '--without-sqlite' '--with-libxml-dir=/usr' '--with-xml' '--with-apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--without-odbc' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-xmlwriter'  

configureで'--without-sqlite' '--disable-pdo'になっているのでSQLite3とPDOは使えないものと勘違いしました。
しかしよくよく調べてみるとここで使えるように定義されていました。

/etc/php.d/dom.ini, /etc/php.d/gd.ini, /etc/php.d/imap.ini, /etc/php.d/ioncube-loader.ini, /etc/php.d/mbstring.ini, /etc/php.d/mysql.ini, /etc/php.d/mysqli.ini, /etc/php.d/pdo.ini, /etc/php.d/pdo_mysql.ini, /etc/php.d/pdo_sqlite.ini, /etc/php.d/sqlite.ini, /etc/php.d/xmlreader.ini, /etc/php.d/xmlwriter.ini, /etc/php.d/xsl.ini  

あとはサンプルを作成して動作を確認するだけです。

-bash-3.1$ cat sqlite-pdo-test.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
</head>

<body>
<h1 class=title>SQLiteテスト</h1>
<script language=PHP>

try {
    /* SQLiteハンドルの取得 */
    $dbfile = 'xxxxxxxx.db';
    $dbh = new PDO("sqlite:$dbfile", null, null);

    $sqlcmd = "select UrlStr,KeyName,KeyStr,AndOr,Nozoku,WebKeyStr,Kaisetu "
        . "from Tsuhan_Key where UrlStr = 'xxxxx' ";
    echo "$sqlcmd<br>\n";
    $sth = $dbh->query($sqlcmd);
    $rs = $sth->fetch(PDO::FETCH_ASSOC);
    print_r($rs); echo "<br>\n";
    echo implode(", ", $rs) . PHP_EOL . "<br>\n";
    echo $rs['KeyName'];
} catch (PDOException $e) {
    print $e->getMessage()."\n";
}
$dbh = null;
</script>
</body>
</html>

これでSQLite3が正常に動作することが確認できました。