- ベストアンサー
PHP5からSQLite3への接続方法に関する問題
- PHP5からSQLite3への接続方法に関する問題が発生しています。PHPファイルの32行目に記述されているsqlite_open()関数の呼び出しで、ファイルが暗号化されているか、またはデータベースではないことを示すエラーメッセージが表示されています。
- 現在、Windows XP環境でPHP Version 5.3.5およびSQLite3を使用しています。php_pdo.dllファイルが正しい場所にないため、php.iniファイルのコメントアウトを解除すると、Apacheが起動しなくなります。
- 初心者のため、さまざまな情報を調査しましたが解決策が見つかっていません。どなたか解決方法を教えていただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
sqlite_open はsqlite2.8 用の関数なので、sqlite3用のファイルは開けません。 windows用のphp5.3 ならphp_sqlite3.dll もextディレクトリーに含まれてるはずなので、 php.iniで extension=php_sqlite3.dll もdefaultで有効のはずですが、ご確認ください。 sqlite3用では、オブジェクト型になっていますので、以下のように記述します。 $db = new SQLite3('my_sqlite_db.db'); 参考 http://jp.php.net/manual/ja/sqlite3.open.php php_sqlite3 では不用とはいえ、defaultで入ってるはずのphp_pdo.dllがないというのもおかしい。どんなインストール方法をしたのだろうか?
その他の回答 (1)
- hogehoge78
- ベストアンサー率80% (433/539)
PHPをアップデートされたんでしょうか。php.iniが古い気がします。 PHP5.3以降、php_pdo.dllは、コアに吸収されたので、デフォルトで有効になっています。(Windowsの場合) つまり、php.iniに、php_pdo.dllの表示自体必要ないです。 ですので、 extension=php_pdo_sqlite.dll をphp.iniになければ追加してやってください(extディレクトリにphp_pdo_sqlite.dllは入ってましたよね?) そして、PDOを使ったsqlite3への接続方法は、 <?php $pdo = new PDO('sqlite:C:/pg/Apache/Apache2.2/htdocs/testdb'); $stmt = $pdo->query("SELECT * FROM table"); $stmt->setFetchMode(PDO::FETCH_ASSOC); foreach($stmt as $row){ print_r($row); } ?> とかといったようにします。(詳しくはPHPマニュアルなどを参考に。) 如何でしょうか。
お礼
回答ありがとうございます。 上記のソースを実行したところ・・・ Fatal error: Call to a member function setFetchMode() on a non-object in C:\pg\Apache\Apache2.2\htdocs\a.php on line 7 このようなメッセージがでてしまいました・・・。
お礼
回答ありがとうございます。 以下のPHPファイルを実行しました。 <?php $db = new SQLite3('C:/pg/Apache/Apache2.2/htdocs/testdb'); $db->exec('CREATE TABLE foo (bar STRING)'); $db->exec("INSERT INTO foo (bar) VALUES ('This is a test')"); $result = $db->query('SELECT bar FROM foo'); var_dump($result->fetchArray()); ?> 結果は以下の通りです。 Warning: SQLite3::exec() [sqlite3.exec]: table foo already exists in C:\pg\Apache\Apache2.2\htdocs\a.php on line 4 array(2) { [0]=> string(14) "This is a test" ["bar"]=> string(14) "This is a test" } SQLiteにテーブルが作成され、データも格納されているのが分かりました。 その前のワーニングはデータベース接続と何か関係ありますか??