I was curious, so I made simple test code, it seems works fine for PHP4.0.4
as Apache 1.3.17 module running under RedHat Linux 7.0.1. (Besides, I have
very similar code that you have. It works for me)

What is your environment?

If you are 100% sure that you don't have bug in code, I suggest to fill bug
report with your code.

Regards,

Yasuo Ohgaki

---
My test code output

=== BEGIN ===
Resource id #1                <= database link resource
Resource id #2                <= query result resource
Object                             <= PgSql db object
Resource id #3                 <= query result resource
=== END ===

This is my test code

<?php

class DB_PGSQL {
 var $res_connection;
 var $res_result;

 function DB_PGSQL($connect_string) {
  $this->res_connection = pg_pConnect($connect_string);
 }

 function Query($sql) {
  $this->res_result = pg_Exec($this->res_connection, $sql);
  return $this->res_result;
 }
}

class DB {
 var $database;
 var $source_type;

 function DB($source_type, $connect_string) {
  $this->source_type = $source_type;
  switch ($source_type) {
   case 'PGSQL':
    $this->database = new DB_PGSQL($connect_string);
    break;
  }
 }

 function Query($sql) {
  $this->database->Query($sql);
 }
}

$db = new DB('PGSQL','dbname=db_session host=dev user=yohgaki');

ECHO $db->database->res_connection;echo '<br>';
$db->database->Query('SELECT * FROM sys_session'); // CALL PGSQL class'
Query() directly
ECHO $db->database->res_result;echo '<br>';

ECHO $db->database;echo '<br>';
$db->Query('SELECT * FROM sys_session'); // CALL PGSQL class' Query()
INdirectly
ECHO $db->database->res_result;echo '<br>';

?>



> Well, you already have code to PostgreSQLDataSource ... the other object
> just encapsulates it ...
>
> ok heres some more code:
>
> class AbstractDataSourceManager
> {
>    var $dataSourceName;
>    var $dataSource;
>    var $error_handler;
>
> ...
>
>     function open()
>    {
>       <make $dataSource object with connection params>
>
>       if (is_Object($dataSource))
>          return $dataSource->open();
>       else
>          return false;
>    }
>
>    function executeQuery( $queryString )
>    {
>       return $this->dataSource->executeQuery($queryString);
>    }
> }
>
> --------------------
> Test Code:
>
> if ($HTTP_GET_VARS["testno"]==7)
> {
>  $manualNameTest = new
>
AbstractDataSourceManager("PostgreSQLDataSource","","","wwwuser","","rp2");
>  $result = $manualNameTest->executeQuery("select * from requirements;");
>
>  $db = new PostgreSQLDataSource('','','wwwuser','','template1');
>  $db->open();
>  echo $db->connection."<BR>";
>  echo $db->executeQuery("select * from issues;");
> }
>
> ----------------------
> Test Output:
>
> The connection in open() is :Resource id #1
> The connection in executeQuery() is :''
>
> Warning: Supplied argument is not a valid PostgreSQL link resource in
> /var/wwwroot/php/PostgreSQLDataSource.php on line 67 <this is the
> pg_pConnect line...>
> The connection in open() is :Resource id #2
> Resource id #2
> The connection in executeQuery() is :'Resource id #2'
> Object
> ----------------
>
> So in other words, the one using the encapsulator doesnt work - it seems
to
> lose $this->connection in PostgreSQLDataSource when its contained in
> AbstractDataSourceManager !
>
> ... theres something screwball here - i mean - an object should be able to
> access its own properties in any scope at any time shouldnt it ?
>
> This is totally screwing me here ...
>
> AndrewH
>
> ----- Original Message -----
> From: "Andrew Hill" <[EMAIL PROTECTED]>
> To: "Andrew Halliday" <[EMAIL PROTECTED]>;
<[EMAIL PROTECTED]>
> Sent: Friday, March 02, 2001 11:53 AM
> Subject: Re: [PHP] Loss of connection handle object
>
>
> > Perhaps if you showed us some code?
> >
> > Best regards,
> > Andrew
> >
> >
> > On 3/1/01 7:35 PM, "Andrew Halliday" <[EMAIL PROTECTED]> wrote:
> >
> > > open() is simply supposed to open the connection to the database and
> store
> > > it in $this->connection.
> > > As you can see - it gets the connection info from either the objects
> > > properties or from parameters passed to it.
> > > Can you see what Ive done wrong...if anything?!?!
> > >
> > > AndrewH
> > >
> > > ----- Original Message -----
> > > From: "Andrew Hill" <[EMAIL PROTECTED]>
> > > To: "Andrew Halliday" <[EMAIL PROTECTED]>;
> <[EMAIL PROTECTED]>
> > > Sent: Friday, March 02, 2001 11:13 AM
> > > Subject: Re: [PHP] Loss of connection handle object
> > >
> > >
> > >> Andrew,
> > >>
> > >> What is the open() function?
> > >>
> > >> Best regards,
> > >> Andrew
> > >> ---------------------------------------
> > >> Andrew Hill - OpenLink Software
> > >> Director Technology Evangelism
> > >> eBusiness Infrastructure Technology
> > >> http://www.openlinksw.com
> > >>
> > >>
> > >>
> > >>
> > >> On 3/1/01 7:27 PM, "Andrew Halliday" <[EMAIL PROTECTED]> wrote:
> > >>
> > >>> Okay - Im writing an object to wrap a database.
> > >>> The key problem is this:
> > >>>   - it declares a connection var as an object property
> > >>>   - the open() function opens the connection to the database and
> stores
> > >>> the handle in $this->connection
> > >>>   - the executeQuery() method complains about not having a valid
> handle,
> > >>> because by then, somehow, $this->connection==null!!!
> > >>>
> > >>> Any ideas?-i swear its just something stupid ive missed ...
> > >>>
> > >>> HELP!
> > >>>
> > >>> Thanx in advance,
> > >>> AndrewH
> > >>>
> > >>> -------------------------------------------------------------
> > >>> The code following this returns the following to the browser:
> > >>> -------------------------------------------------------------
> > >>> The connection in open() is :Resource id #1
> > >>> The connection in executeQuery() is :''
> > >>>
> > >>> Warning: Supplied argument is not a valid PostgreSQL link resource
in
> > >>> /var/wwwroot/php/PostgreSQLDataSource.php on line 67
> > >>>
> > >>>
> > >>> -------------------------------------------------------------
> > >>>
> > >>>
> > >>> class PostgreSQLDataSource
> > >>> {
> > >>>  var $connection;
> > >>>  var $lastResultSet;
> > >>>  var $error_handler;
> > >>>
> > >>>  var $host, $port, $username, $password, $database;
> > >>>
> > >>>  function PostgreSQLDataSource($host, $port, $username, $password,
> > >>> $database)
> > >>>  {
> > >>>     global $error_handler;
> > >>>     $this->error_handler = $error_handler;
> > >>>
> > >>>     $this->host = $host;
> > >>>     $this->port = $port;
> > >>>     $this->username = $username;
> > >>>     $this->password = $password;
> > >>>     $this->database = $database;
> > >>>
> > >>>     //Legacy behaviour: $this->open($host, $port, $username,
> $password,
> > >>> $database);
> > >>>  }
> > >>>
> > >>>  function open(/*variable arg list*/)
> > >>>  {
> > >>>     $connectionString = "";
> > >>>
> > >>>     if (func_num_args() == 5)
> > >>>     {
> > >>>        $this->host = func_get_arg(0);
> > >>>        $this->port = func_get_arg(1);
> > >>>        $this->username = func_get_arg(2);
> > >>>        $this->password = func_get_arg(3);
> > >>>        $this->database = func_get_arg(4);
> > >>>     }
> > >>>
> > >>>     if ($this->host)
> > >>>        $connectionString .= " host=".$this->host;
> > >>>     if ($this->port)
> > >>>        $connectionString .= " port=".$this->port;
> > >>>     if ($this->username)
> > >>>        $connectionString .= " user=".$this->username;
> > >>>     if ($this->password)
> > >>>        $connectionString .= " password=".$this->password;
> > >>>     if ($this->database)
> > >>>        $connectionString .= " dbname=".$this->database;
> > >>>
> > >>>     $this->connection = pg_Connect($connectionString);
> > >>> echo "The connection in open() is :".$this->connection."<BR>";
> > >>>     if ($this->connection == false)
> > >>>        return false;
> > >>>     else
> > >>>        return true;
> > >>>  }
> > >>>
> > >>>  function close()
> > >>>  {
> > >>>     return pg_Close($this->connection);
> > >>>  }
> > >>>
> > >>>  function executeQuery($queryString)
> > >>>  {
> > >>> echo "The connection in executeQuery() is
> :'".$this->connection."'<BR>";
> > >>>     $this->lastResultSet = pg_exec($this->connection,$queryString);
> > >>>     return new Iterator($this);
> > >>>  }
> > >>>
> > >>>  /*PRIVATE FUNCTIONS:*/
> > >>>  function getRow($row)
> > >>>  {
> > >>>     return pg_fetch_array($this->lastResultSet,$row);
> > >>>  }
> > >>>
> > >>>  function getResultLength()
> > >>>  {
> > >>>     return count($this->lastResultSet);
> > >>>  }
> > >>> }
> > >>>
> > >>>
> > >>>
> > >>>
> > >>
> > >
> >
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> To contact the list administrators, e-mail: [EMAIL PROTECTED]
>
>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to