• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP5からSQLite3の接続)

PHP5からSQLite3への接続方法に関する問題

このQ&Aのポイント
  • PHP5からSQLite3への接続方法に関する問題が発生しています。PHPファイルの32行目に記述されているsqlite_open()関数の呼び出しで、ファイルが暗号化されているか、またはデータベースではないことを示すエラーメッセージが表示されています。
  • 現在、Windows XP環境でPHP Version 5.3.5およびSQLite3を使用しています。php_pdo.dllファイルが正しい場所にないため、php.iniファイルのコメントアウトを解除すると、Apacheが起動しなくなります。
  • 初心者のため、さまざまな情報を調査しましたが解決策が見つかっていません。どなたか解決方法を教えていただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

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がないというのもおかしい。どんなインストール方法をしたのだろうか?

kazuya_rx93
質問者

お礼

回答ありがとうございます。 以下の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にテーブルが作成され、データも格納されているのが分かりました。 その前のワーニングはデータベース接続と何か関係ありますか??

その他の回答 (1)

回答No.2

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マニュアルなどを参考に。) 如何でしょうか。

kazuya_rx93
質問者

お礼

回答ありがとうございます。 上記のソースを実行したところ・・・ Fatal error: Call to a member function setFetchMode() on a non-object in C:\pg\Apache\Apache2.2\htdocs\a.php on line 7 このようなメッセージがでてしまいました・・・。

関連するQ&A