I'm pretty sure I found the problem - I should've spotted it earlier.

The function ProfileList::render gets a reference to the $db object by
its parameter &$db. While you loop over your results, you pass the
reference on to $this->des->load. I'm guessing that the definition of
$this->des->load is something like function load($id, $db);, in which
case it's not getting a reference to the $db object but an actual copy
in PHP4. Since PHP 5 there is a new object model that makes sure that
any variable that holds an object is actually just a handle to the
object - so whenever you pass it to a function you use it as a
reference instead of a copy.

To make it clear:

class test {
  var $a = 1;
  function aa() {

$c = new test();
$d = $c;
var_dump ($c);

results in:
object(test)#1 (1) { ["a"]=>  int(3) }

This means you should first change the function definitions to not use
references for objects, so take away the & at every &$db parameter.

Second you need to create a new $db object for your $this->des->load
function before the while loop in ProfileList::render. I think the
safest option is to do something like $db2 = new Db(...). You can also
use the keyword clone to clone an object, but i'm not sure what this
does with your internal DB handle.... you could try and see what
happens. Just add $db2 = clone $db; right before the while loop. Call
$this->des->load with $db2 instead of $db.

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

Reply via email to