[PHP] - Adodb-query toevoegen als objecten: alleen laatste

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ik gebruik Adodb om mijn database (mysql) aan te roepen.

De volgende code doet heel raar:

code:
1
2
3
4
5
$destinies_array = array();
while ($obj = $cities->FetchNextObject()) 
{
    array_push($destinies_array, $obj);
}

Ik krijg dan een array met x keer het laatste element in de array cities, met x het aantal verschillende steden.

Gebruik ik FetchRow(), dan gaat alles goed. Ik heb al gezocht op de definities van FetchNextObject en FetchRow, maar ik zie niet wat er fout gaat. Wie wel?

Ik moet objecten krijgen, dus aan FetchRow heb ik in dit geval niets.

/Edit: Als ik in de while-loop de unieke city-id af laat drukken, is deze wel bij beide methoden telkens verschillend. Ik snap niet waarom bij FetchNextObject dan tóch alleen de laatste in de array komt.

[ Voor 16% gewijzigd door Verwijderd op 15-09-2005 21:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Niemand? :?
Modbreak:Het schoppen van je topic binnen 24 uur is niet gewenst hier op GoT. Niet iedereen is 24/7 online, en zeker gezien het feit dat de tijd tussen je topicstart en nu voornamelijk midden in de nacht was, misstaat het je niet even geduld te hebben. Er komt vanzelf wel een antwoord. :)

[ Voor 94% gewijzigd door NMe op 16-09-2005 09:20 ]


  • Gwaihir
  • Registratie: December 2002
  • Niet online
Lijkt erop dat je x keer een reference naar $obj in je array stopt en x keer $obj van inhoud verandert, eindigend met de laatste inhoud, waar dan alle x verwijzingen naar verwijzen.

PHP5 wellicht? Dat maakt in principe references naar objecten, geen kopien ervan.

Waarom trouwens array_push() ipv gewoon $destinies_array[] = $obj ? -- Zie de opmerking over de inefficientie van je keuze in het PHP manual.

[ Voor 22% gewijzigd door Gwaihir op 17-09-2005 02:41 ]


Verwijderd

Topicstarter
Het werkte met PHP4 wel, nu heb ik idd PHP5. Het vage is dat andere functies die op precies dezelfde manier gaan (ook met array_push) wél goed gaan. Kan die code niet pasten, laptop ligt nog bij een vriend van me.

Zal als ik hem terug heb het eens op jouw manier doen.

  • Gwaihir
  • Registratie: December 2002
  • Niet online
Verwijderd schreef op zaterdag 17 september 2005 @ 17:31:
Zal als ik hem terug heb het eens op jouw manier doen.
Ehm.. vervangen van array_push lost je probleem niet op, het maakt alleen je code wat sneller.

Je moet zorgen dat je in je array telkens een kopie van $obj zet, in plaats van een referentie ernaar. Zie de handleiding over het maken van kopiën van objecten in PHP5.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Birdie schreef op zaterdag 17 september 2005 @ 23:59:
[...]

Ehm.. vervangen van array_push lost je probleem niet op, het maakt alleen je code wat sneller.

Je moet zorgen dat je in je array telkens een kopie van $obj zet, in plaats van een referentie ernaar. Zie de handleiding over het maken van kopiën van objecten in PHP5.
Ja, dat bedoelde ik ook, dat ik geen ref maar een kopie plaats :). Morgenavond zal ik er even naar kijken, nu moet ik echt gaan slapen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oké dan :) Ff manual gelezen en daar stond het idd ook in, dat je nu ref's doorgeeft. Ik had de what's new niet gelezen, had ik toch beter wel kunnen doen :). Thanx!

Ik heb het nu opgelost door het zo te doen:

code:
1
$destinies_array[]= clone $obj;

Ik heb het idee dat overal clone te gebruiken niet de bedoeling is... Maar goed, het werkt wel :).

[ Voor 40% gewijzigd door Verwijderd op 19-09-2005 18:50 ]


  • Gwaihir
  • Registratie: December 2002
  • Niet online
Tja; het ligt eraan wat je er mee wilt doen. Ik denk dat je in de meeste gevallen net zo makelijk met je resultaatobject ($cities) kunt werken. In feite ben je dat nu zo'n beetje digitaal aan het over pennen (computer heeft strafwerk? ;)).

Verwijderd

Topicstarter
Ik moet een array meegeven aan mijn template-engine (smarty) en dan kan ik het query-resultaat niet direct meegeven aan smarty. Dus daarom moet ik alles in een array stoppen... Heb jij een beter idee dan?
Pagina: 1