[PHP-users 10610] pear DBオブジェクトのセッションでの受け渡し

Shinsuke Matsui php-users@php.gr.jp
Tue, 8 Oct 2002 10:04:55 +0900


松井と申します。

pear DBのオブジェクトをセッションを使って持ち回そうと思っているのですが、
うまくいきません。お知恵をお貸し頂ければ幸いです。

下記のコードで動作の確認をしてみました。
---------------------------------------------------------------------
<?php
require_once('DB.php');
session_start();
if (!isset($_SESSION['obj'])) {
  $db = DB::connect("pgsql://www:password@localhost/test", true);
  if (DB::isError($db)) {
    die($db->getMessage());
  }
  $_SESSION['obj'] = $db;
}
$db = $_SESSION['obj'];
$db->query("select * from test;"); // ここでエラーが出力される。
?>
<TITLE>TEST</TITLE>
<A HREF="<?php echo $_SERVER['PHP_SELF'] ?>">LINK</a>
---------------------------------------------------------------------

LINKをクリックして次の画面に遷移すると、下記のエラーが出力されてしまいます。

Fatal error: The script tried to execute a method or access a property of 
an incomplete object. Please ensure that the class definition db_pgsql of 
the object you are trying to operate on was loaded _before_ the session 
was started in /home/smatsui/public_html/test.php on line 12

print_r()で$dbの中身を確認してみると、

__PHP_Incomplete_Class Object ( [__PHP_Incomplete_Class_Name] => db_pgsql(以下略)

と表示されます。

session_start()の前に、require_once()でDB.phpを読み込んでいるので、
文法的な間違いではないと思うのですが、いかがでしょうか。

環境はNetBSD 1.6-RELEASE + PostgreSQL 7.2.2 + Apache 1.3.27+ PHP 4.2.2(DSO)です。
php.iniではsession.auto_start=0、session.use_trans_sid=0に設定しています。

よろしくお願いします。
-- 
Shinsuke Matsui <smatsui@internet-inc.co.jp>