PHP+SQL verwerkt alleen eerste regel in resultset

Status
Niet open voor verdere reacties.

mrprozac

Gebruiker
Lid geworden
16 jul 2008
Berichten
183
Goedennacht,

Ik ben een script aan het schrijven voor mijn website dat rekeningen moet genereren.
Dit wordt middels een cron-job gedaan en wordt iedere maand opgeroepen om verbruik van de voorgaande maand te verzamelen en met deze gegevens een rekening te genereren.

Het script werkte totdat ik de volgen functie schreef, of laat ik het beter formuleren. Het script werkt, maar deze functie gaat in de war.

De bedoeling van deze functie is om een array op te bouwen van gebruikers dat afgelopen maand iets hebben verbruikt, dit wordt gedaan middels de SQL (distinct) query. Deze query geeft als resultaat de user id's terug die in de database tabel voorkomt. PHP ziet alleen de eerste regel van de (nu) twee regels in de resultset.
Met de query is niks mis, deze geeft de juiste resultaten terug als ik het opdracht in SQL Browser invoer.

Ik heb de foreach() functie van PHP geprobeerd, maar ik kwam er al snel achter dat deze niet werkte omdat mysql_fetch_assoc() maar een regel van de resultset ziet.

De while() functie zou in theorie eigenlijk een loop moeten uitvoeren totdat die door alle regels in de resultset heen is. Maar dat gebeurt hier niet.

Misschien komt het door de tijd, of ik heb nu een (grote) blunder gemaakt.
Kan iemand mij helpen met de onderstaande code?

Bij voorbaat dank,
Oguzhan

PHP:
function UsersLastMonth(){
	$sql="SELECT DISTINCT `user` FROM `smslog`";
	$sql=mysql_query($sql);
	$rows=mysql_num_rows($sql);
	$users=mysql_fetch_assoc($sql);
	#return($sql);
	$debug=array();	
	while($row=mysql_fetch_assoc($sql)){
		$debug[]=CollectInvoiceData($row['user']);
	}
	return $debug;
}

PS. De CollectInvoiceData() genereerd de data voor de factuur en geeft dus een multi-demensional array terug. Echter wordt er maar een array geprint op de test pagina.

Voorbeeld van doel:
Code:
array
  0 => 
    array
      'u' => 6,
      'p' => 
        array
          2 => 
            array
              ...
      'a' => 
        array
          2 => 
            array
              ...
array
  1 => 
    array
      'u' => 7,
      'p' => 
        array
          2 => 
            array
              ...
      'a' => 
        array
          2 => 
            array
              ...

Huidige toestand:
Code:
array
  0 => 
    array
      'p' => 
        array
          2 => 
            array
              ...
      'a' => 
        array
          2 => 
            array
              ...
      't' => 
        array
          0 => int 3000
          2 => int 3000
 
1. $users=mysql_fetch_assoc($sql);
2. while($row=mysql_fetch_assoc($sql)){

Maar, even uit mijn hoofd en zonder toeters en bellen:

PHP:
function UsersLastMonth(){
  $rows[0]=0; // zet het aantal records in $rows[0] 
  $sql="SELECT DISTINCT `user` FROM `smslog`";
  $result=mysql_query($sql);
  while ($rows[]=mysql_fetch_assoc($result)) $rows[0]++;
  return $rows;
}



Succes,
Tonko Boekhoud
Klik op [OK]
 
Bedankt voor uw reactie. Ik ben er inmiddels achter gekomen dat ik een fout in de code had gemaakt waardoor PHP een conflict crieerde.
Het blijkt dat de eerste mysql_fetch_assoc() de laatste regel overhield voor de volgende instantie van het functie. Na het verwijderen/commenten van de regel was het probleem opgelost.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan