Problem with resources and php 5 objects

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I created a php class in charge of doing mysql queries and when this query is called it returns an object of the type "myddl_result", this second object is passed the resource of type mysql_result and if i debug the whole thing i seems allright until the __construct is complete, after that, the __destruct is called for i don't know which reason and the rest is executed normally....

At that point my resource is of type unknown and can't be used anymore... I really need help on that please... i don't understand whats happening even after reading the php website 2x about php 5 objects...

Note: What i understand is that the __destruct is called and thats what destroys my resource since i call the mysql_free_result, i tried commenting it but obviously thats not what i want, i want to free the resource when the object is destroyed which is good pratice, but WHY is the __destruct called, it doesn't make sense it's not supposed to be destroyed it's just been created...

======================================================
QUERY FUNCTION
======================================================

public function query($sql, $buffered = true){
 if($this->p_mylink){
  //execute the query and look for an exception
  if($buffered == true){
   $res = mysql_query($sql, $this->p_mylink);
  }else{
   $res = mysql_unbuffered_query($sql, $this->p_mylink);
  }
  if(is_resource($res)){    //Result returned
   $mddl_result = new myDDLResult($res);
   echo 'Completed creation<br><pre>';
   var_dump($mddl_result);
   echo '</pre><br>';
   return $mddl_result;    //Create a result object and return it
  }elseif($res === true){    //Command executed succesfully
   return new myDDLResult();    //Create a result object and return it
  }elseif($res === false){    //Can only mean an error occured
   return $this->getError();    //Create a result object and return it
  }else{    //Impossible case but we'll warn the user
   throw new myDDLException('query failed to compare mysql_query type');
  }
 }
 throw new myDDLInvalidOperationException('Not connected to server');
}

=========================================================
RESULT CLASS
=========================================================

//Class in charge of interfacing a result
final class myDDLResult {
    //Local vars
    private $p_myresult;

    //Constructor / destructor
    public function __construct($result = NULL){
        //Store
        echo 'Creating';
        echo '<br>';
        var_dump($result);
        echo '<br>';
        $this->p_myresult = $result;
    }
    public function __destruct(){
        echo 'Destroying';
        echo '<br>';
        var_dump($this->p_myresult);
        echo '<br>';
        mysql_free_result($this->p_myresult);
    }
}

====================================================
OUTPUT
====================================================
Creating
resource(3) of type (mysql result)
Destroying
resource(3) of type (mysql result)
Completed creation

object(myDDLResult)#1 (1) {
  ["p_myresult:private"]=>
  resource(3) of type (Unknown)
}
Destroyingresource(3) of type (Unknown)

Warning: mysql_free_result(): 3 is not a valid MySQL result resource in C:\Source\palliscience\maj.palliscience.com\dev\lib_myddl.php on line 200


Destroying
resource(3) of type (Unknown)

Warning: mysql_free_result(): 3 is not a valid MySQL result resource in C:\Source\palliscience\maj.palliscience.com\dev\lib_myddl.php on line 200
Destroying
resource(3) of type (Unknown)

Warning: mysql_free_result(): 3 is not a valid MySQL result resource in C:\Source\palliscience\maj.palliscience.com\dev\lib_myddl.php on line 200
Destroying
resource(3) of type (Unknown)

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux