SQLiteがうまく動かないので悩んでいます。
----------------------------------------------------
phpのバージョンは5.3.6、Apacheは2.2.14です。SQLite Library 2.8.17
----------------------------------------------------
となっています。
php.iniには
extension=php_pdo.dll
extension=php_pdo_sqlite.dllと
[sqlite]セクションで、
pdo.dsn.samples="sqlite:d:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\samples\chap05\samples.sqlite"
と入れています。
doc_rootはd:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\です。
d:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\samples\chap05\samples.sqliteを空ファイルで作り、
d:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\samples\chap05\connect.phpを作りました。
connect.php
----------------------------------
<?php
try{
$db=new PDO('samples');
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
print('データベースへの接続を確立しました。');
}catch(PDOException $e){
die('エラーメッセージ:'.$e->getMessage());
}
?>
です。
http://localhost/samples/chap05/connect.phpを実行すると、
エラーメッセージ:invalid data source nameと出てきます。
SQLiteがうまく扱えません。どなたかアドバイスお願いします。
> PDOの項目にpdo_sqliteの部分はありません。PDO drivers sqlite2 とあるだけです。
> SQLite Library 2.8.17は、SQLiteという項目の中にあります。
質問文に『php.iniには extension=php_pdo.dll extension=php_pdo_sqlite.dllと~』とありますが、「extension=php_pdo_sqlite.dll」ではなく「extension=php_sqlite.dll」を有効にしていないでしょうか?
現在、「PDO drivers sqlite2」と表示されているのでしたら、SQLite2のデータベースなら利用できると思います。
「pdo.dsn.samples="sqlite2:D:\~」として確認してみてください。
http://www.php.net/manual/ja/ref.pdo-sqlite.connection.php
またPHP 5.3.0以降は、「php_pdo.dll」が含まれていませんが、公式サイトからダウンロードしたPHPを使っていますか?
PDOでSQLite3のデータベースを扱う場合、「extension=php_pdo_sqlite.dll」だけを有効にすれば大丈夫です。(※phpinfo()で以下のように表示されます。)
※「extension=php_pdo_sqlite.dll」と「extension=php_sqlite.dll」の両方を有効にした場合、PDOでSQLite3の他にSQLite2のデータベースを利用できるようになります。
「php_pdo.dll」が含まれていたり、「extension=php_pdo_sqlite.dll」を有効にしても「PDO drivers」に「sqlite」と表示されない場合は、公式サイトから新バージョンの5.3.8をダウンロードして、上書きではなく新規で入れてみてください。
http://windows.php.net/download/
「extension=php_sqlite.dll」で利用できる関数は以下になります。
[sqlite]セクションで、
pdo.dsn.samples="sqlite:d:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\samples\chap05\samples.sqlite"
これが、違うんじゃね?
alias を使うときは、[PDO] セクションだと思う。
http://php.net/manual/ja/pdo.construct.php
[PDO] pdo.dsn.samples="sqlite:d:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\samples\chap05\samples.sqlite"
--
(追記)
念のために確認ですが、Apache は D: ドライブにインストールした、ということであってますよね?
レスありがとうございます。
ですが、残念ながら同じメッセージが出ます。
Windows7(64bit)を使っているのですか?
Apacheの権限では "Program Files (x86)" ディレクトリに書き込めない状況かもしれません。
いずれにしても、 Webアプリで"Program Files (x86)" に書き込むというのは危険です。
書き込み可能なデータディレクトリにsqliteデータベースを作成することをお勧めします。
レスありがとうございます。そうです。Windows 7 64bitを使っています。
そうなんですか?危険なことをしていたのを知らなかったのですね。教えてくださってありがとうございます。
PHPのXML関数を使ったプログラムを走らせた時に、"Program files (x86)"以下のディレクトリに書き込めました。権限の問題では無いのでは無いかと思います。
いずれにせよ、Apacheを再インストールします。教えていただきありがとうございます。
> PDOの項目にpdo_sqliteの部分はありません。PDO drivers sqlite2 とあるだけです。
> SQLite Library 2.8.17は、SQLiteという項目の中にあります。
質問文に『php.iniには extension=php_pdo.dll extension=php_pdo_sqlite.dllと~』とありますが、「extension=php_pdo_sqlite.dll」ではなく「extension=php_sqlite.dll」を有効にしていないでしょうか?
現在、「PDO drivers sqlite2」と表示されているのでしたら、SQLite2のデータベースなら利用できると思います。
「pdo.dsn.samples="sqlite2:D:\~」として確認してみてください。
http://www.php.net/manual/ja/ref.pdo-sqlite.connection.php
またPHP 5.3.0以降は、「php_pdo.dll」が含まれていませんが、公式サイトからダウンロードしたPHPを使っていますか?
PDOでSQLite3のデータベースを扱う場合、「extension=php_pdo_sqlite.dll」だけを有効にすれば大丈夫です。(※phpinfo()で以下のように表示されます。)
※「extension=php_pdo_sqlite.dll」と「extension=php_sqlite.dll」の両方を有効にした場合、PDOでSQLite3の他にSQLite2のデータベースを利用できるようになります。
「php_pdo.dll」が含まれていたり、「extension=php_pdo_sqlite.dll」を有効にしても「PDO drivers」に「sqlite」と表示されない場合は、公式サイトから新バージョンの5.3.8をダウンロードして、上書きではなく新規で入れてみてください。
http://windows.php.net/download/
「extension=php_sqlite.dll」で利用できる関数は以下になります。
レスありがとうございます。
「pdo.dsn.samples="sqlite2:D:\~」としても駄目でした。
>「extension=php_pdo_sqlite.dll」と「extension=php_sqlite.dll」の両方を有効
>にした場合、PDOでSQLite3の他にSQLite2のデータベースを利用できるようになりま
>す
今この状態です。phpinfoでは、sqlite2と出てきますが。
どうにも頭が混乱していて分からなくなっています。目をさらにして見ているのですが、誤りがどこにあるのか分かりません。
レスありがとうございます。
「pdo.dsn.samples="sqlite2:D:\~」としても駄目でした。
>「extension=php_pdo_sqlite.dll」と「extension=php_sqlite.dll」の両方を有効
>にした場合、PDOでSQLite3の他にSQLite2のデータベースを利用できるようになりま
>す
今この状態です。phpinfoでは、sqlite2と出てきますが。
どうにも頭が混乱していて分からなくなっています。目をさらにして見ているのですが、誤りがどこにあるのか分かりません。