On Mon, Sep 1, 2008 at 9:23 AM, Evert Lammerts <evert.lammerts@xxxxxxxxx>wrote: > 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() { > $this->a++; > } > } > > $c = new test(); > $d = $c; > $c->aa(); > $d->aa(); > 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. > aha, excellent explanation , and $db2 = clone$db; worked fine! I was reading my way round php.net and getting closer I think, your explanation and probably saved my a few days , so thanks. -- Gav...