[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>