読者です 読者をやめる 読者になる 読者になる

Web言語のお勉強~ど素人が往く~

かつてVB6を1年くらい触った事があるだけのど素人がWeb言語に挑戦します。勉強結果を随時発表します。

PHPのお勉強「SQLiteを使ってみるも、『could not find driver』エラーで動かず・・・」


SQLite

仕事でSQLiteを使う場面が出てきた。
勿論、本番環境ではなくて開発環境で軽く動作検証するのに使うだけではあるのだが。

というか

「SQLiteって何?」

というのが正直なところ。
調べたところ下記の様なものを指すらしい。

SQLite
SQLite(エスキューライト、エスキューエライト)は、パブリックドメインの軽量な関係データベース管理システム (RDBMS) である。


概要
サーバとしてではなくアプリケーションに組み込んで利用される軽量のデータベースである。 一般的なRDBMSに比べて大規模な仕事には不向きだが、中小規模ならば速度に遜色はない。 また、APIは単純にライブラリを呼び出すだけであり、データの保存に単一のファイルのみを使用することが特徴である。バージョン3.3.8からは全文検索のFTS1モジュールがサポートされた。その後 FTS2 - FTS3 と強化を続けバージョン3.7.4からはFTS4モジュールがサポートされている。


SQLite - Wikipedia

ふむふむ。
DBサーバーを立てなくてもファイルで簡易的にRDBMSを利用できる様にしてくれる物らしい。
これは便利かも。

で、PDOを使ってみると・・・

<?php
    $dbh = new PDO("sqllite:hogedb");
?>

パスも合っているし、php.iniの設定も確認したが
下記のslqite関連のdllは読み込んでくれているようだ。

extension=php_pdo_sqlite.dll
extension=php_sqlite3.dll

phpinfoメソッドも読んで動作を確認した。

phpinfo();

動いているように見える。

f:id:MoneyReport:20150922143838j:plain

だのに何故か実行すると・・・

could not find driver

のエラーが吐き出されるばかり(-_-;
何故だ何がいけない(@o@)

ケアレスミス

色々とやっている中で、気が付いた・・・

sqllite・・・

SQL LITEになってる(`_`)

Lが2個になっている・・・。

綴りを「sqlite」に直すと・・・

<?php
    $dbh = new PDO("sqlite:hogedb");
?>

動いたーーーー!!!!

単純ミスでお恥ずかしや(^O^;

SQLite入門 第2版

SQLite入門 第2版

追記

SQLiteってカラムに型を持ってないの!?
DateTime型のカラムに「NOW()」ってクエリで指定したら怒られた(>_<)

SQLiteにはデータ型がないので、日付を扱うときには注意が要ります。


あと、SQLiteで現在の時刻を取得する場合


select datetime('now');


と実行するのですが、現在の時刻からマイナス9時間された値が返ってきます。
ロケールがうまくあっていないようなので、これを使って時刻を表示する場合は、以下のように実行して、9時間プラスします。


select datetime('now' ,'+09:00:00');


SQLiteで日付を扱うときに注意すること - public static void main

追記2

そういえば、SQLiteってユーザー名とパスワードがいらないんですね~。

SQLiteへの接続
PDOでSQLiteへ接続するには以下のようなDSNを指定し、PDOオブジェクトのインスタンスを生成します。


$dsn = 'sqlite:c:\test\sqlite.db';
$db = new PDO($dsn);


上記のように第一引数に指定するDSNは、
「sqlite:DBフルパス」
という表記で記載します。
SQLiteにはユーザやパスワードの設定がないので、PDOオブジェクトを生成する際には、
第二、第三引数は必要ありません。
PDO接続(SQLite,MySQL) | PHP入門~bituse~