Avatar billede chrisbuchholz Nybegynder
25. februar 2009 - 23:46 Der er 9 kommentarer og
1 løsning

mysql_fetch_assoc kan kun kaldes én gang pr. query

Hej,

jeg er lige løbet ind i et problem hvor jeg kan have brug for at kalde mysql_fetch_row/assoc på den samme query flere gange, men det ser ikke ud til at det kan lade sig gøre.

Første gang det kaldes så virker det fint, men anden gang tager funktionen ikke effekt. Hvis jeg printer det giver det første "array" og de resterende gange bare resource id'et.

Hvordan kan det være det kun kan kaldes én gang på hver query og er der nogen måde at komme uden om det på?
Avatar billede arne_v Ekspert
26. februar 2009 - 00:25 #1
Det er da helt almindeligt at kalde mysql_fetch_array i en while løkke, så du kan godt kalde den flere gange.

Forudsat naturligvis at der er mere end en række.
Avatar billede chrisbuchholz Nybegynder
26. februar 2009 - 00:27 #2
Jeg kom op med en ret simpel løsning der bygger på at oprette et eksternt array med outputtet fra mysql_fetch_array og så bare hive det igennem hver gang, men jeg kunne stadigvæk godt tænke mig at høre hvorfor mysql_fetch_array/assoc/row virker sådan og om der er nogen lettere måde at gøre det på:

Her er et eksempel på min løsning:

$i = 0;
while( $r = mysql_fetch_array($query) ) {
$query_row = $r;
$i++;
}

og så kan det så køres igennem så mange gange man vil med følgende:

for( $ii=0; i<count($query_row); i++ ) {
$query_row[$ii][*something*];
}
Avatar billede chrisbuchholz Nybegynder
26. februar 2009 - 00:29 #3
arne_v:

når jeg normalt kalder mysql_fetch_array så bruger jeg en while løkke ja, men i det jeg er igang med at lave ender jeg op med at jeg gerne vil kører flere forskellige while løkker på forskellige tidspunkter, men med den samme query og det ser ikke ud til at være muligt.
Avatar billede chrisbuchholz Nybegynder
26. februar 2009 - 00:31 #4
Jeg prøver lige igen:

for( $ii=0; $ii<count($query_row); $ii++ ) {
$query_row[$ii]["*something*"];
}
Avatar billede arne_v Ekspert
26. februar 2009 - 05:52 #5
Hvis du vil løbe data igennem en gang mere, så er ideen med at gemme i et array udmærket.

Jeg ville nok foretrække at gemme i et array af en klasse fremfor af rå query rækker.

Og man skal huske på at det ikke er en god løsning ved store data mængder.
Avatar billede chrisbuchholz Nybegynder
26. februar 2009 - 11:39 #6
Nå, så er der vel ikke andet at gøre end at bruge den lappeløsning.
Alt er godt - det kan jo være nogen andre med samme problem finder denne tråd og er fri for at søge google tyndt før de finder ud af at det ikke er muligt at gøre på en pæn måde.
Avatar billede dkfire Nybegynder
26. februar 2009 - 13:22 #7
Der er noget helt galt med din kode i det mindste:

$i = 0;
while( $r = mysql_fetch_array($query) ) {
$query_row[] = $r;
$i++;
}

for( $ii=0; $ii<count($query_row); $ii++ ) {
$query_row[$ii]["*something*"];
}
Avatar billede chrisbuchholz Nybegynder
26. februar 2009 - 13:42 #8
dkfire: ja, det har du ret i.
Avatar billede arne_v Ekspert
26. februar 2009 - 17:48 #9
Der er ikke nogen pæn måde fordi man skal huske hvad et query resultat er. Et query resultat (med mysql_unbuffered_query !) er en stream af data der modtages fra serveren. Man kan ikke spole tilbage i denne stream uden at involvere serveren.
Avatar billede showsource Seniormester
26. februar 2009 - 18:33 #10
man kan jo også bruge mysql_result() i en forløkke
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester