人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

phpの勉強をしています。
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がうまく扱えません。どなたかアドバイスお願いします。

●質問者: inajyun
●カテゴリ:インターネット ウェブ制作
✍キーワード:Apache Catch CONNECT dB DLL
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● a-kuma3
●20ポイント

[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: ドライブにインストールした、ということであってますよね?

◎質問者からの返答

レスありがとうございます。

ですが、残念ながら同じメッセージが出ます。


2 ● じゅぴたー
●20ポイント

Windows7(64bit)を使っているのですか?

Apacheの権限では "Program Files (x86)" ディレクトリに書き込めない状況かもしれません。


いずれにしても、 Webアプリで"Program Files (x86)" に書き込むというのは危険です。

書き込み可能なデータディレクトリにsqliteデータベースを作成することをお勧めします。

◎質問者からの返答

レスありがとうございます。そうです。Windows 7 64bitを使っています。

そうなんですか?危険なことをしていたのを知らなかったのですね。教えてくださってありがとうございます。

PHPのXML関数を使ったプログラムを走らせた時に、"Program files (x86)"以下のディレクトリに書き込めました。権限の問題では無いのでは無いかと思います。

いずれにせよ、Apacheを再インストールします。教えていただきありがとうございます。


3 ● rouge_2008
●60ポイント ベストアンサー

> 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()で以下のように表示されます。)

f:id:rouge_2008:20110827222254p:image:w490


※「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」で利用できる関数は以下になります。

http://www.php.net/manual/ja/book.sqlite.php

◎質問者からの返答

レスありがとうございます。

「pdo.dsn.samples="sqlite2:D:\?」としても駄目でした。

>「extension=php_pdo_sqlite.dll」と「extension=php_sqlite.dll」の両方を有効

>にした場合、PDOでSQLite3の他にSQLite2のデータベースを利用できるようになりま

>す

今この状態です。phpinfoでは、sqlite2と出てきますが。

どうにも頭が混乱していて分からなくなっています。目をさらにして見ているのですが、誤りがどこにあるのか分かりません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ