Avatar billede apache999 Nybegynder
19. august 2003 - 13:43 Der er 5 kommentarer og
1 løsning

Der mangler en række i resultatsættet??

Dette er mig en gåde:

Jeg har en database, hvor denne query burde resultere i 4 rækker med resultater, eftersom der er 4 hold, der har kategori_id = 4:

-------------------
$strSQL="SELECT * FROM us_hold WHERE us_hold.kategori_id = 1";

$result = executeSQL($strSQL);

while($data = mysql_fetch_array($result) {
    // Skriv resultaterne
}
---------------------
Men af en eller anden grund bliver den sidste række altid udeladt. Hvis jeg "snyder" lidt og gør som følger, fungerer det:
-----------------------
//samme $strSQL som før
$result = executeSQL($strSQL);

$rows = mysql_num_rows($result);
for ($i=-1; $i<$rows;$i++) {
    $data = mysql_fetch_array($result);
    // Skriv resultaterne
}
---------------------------
Min barnelærdom siger mig, at man plejer at sætte $i til 0 ved første iteration, men jeg er nødt til at gøre det som ovenfor og sætte den til -1. Hvad der gør det endnu mere sært er, at hvis jeg indtaster den dersens query ($strSQL) direkte i phpMyAdmin, får jeg alle 4 rækker korrekt vist.

Som sagt har jeg løst problemet ved at sætte $i til -1, men det virker kraftedeme da bøvet, at jeg ikke bare kan bruge en while-løkke, ligesom jeg plejer.

Til de interesserede kan jeg sige, at ovenstående selvfølgelig er en stærkt nedkogt udgave af den "rigtige" query, idet der sføli er mange forskellige kategori_id'er, men efter lang tid har jeg sporet problemet til at ligge her.

Anyone?!?
Avatar billede hdp Nybegynder
19. august 2003 - 13:50 #1
Har du prøvet med ($i=0; $i <= $rows; $i++)  ??
Avatar billede apache999 Nybegynder
19. august 2003 - 13:53 #2
Det vil sføli også give det rigtige resultat. Jeg vil bare gerne vide, hvorfor jeg ikke kan bruge en while-løkke.
Avatar billede jakoba Nybegynder
19. august 2003 - 13:56 #3
din øverste while skulle virke udemærket. og hvis noget blev udeladt skulle det være den første record (fordi din funktion executeSQL piller ved det recordset der returneres fra SQL.

For at få klart svar må du vise koden til executeSQL funktionen (og evt de funktioner den benytter). Vi er dygtige, men vi er ikke dygtige nok til at gætte præcis hvad dine hjemmelavede funktioner gør.
Avatar billede hdp Nybegynder
19. august 2003 - 14:24 #4
Måske fordi din funktion returnerer noget uventet på sidste row - en "last-row" markering af at det er den sidste f.eks. frem for at den returnere en "no--data" ved næste kald. ?
Avatar billede hdp Nybegynder
19. august 2003 - 14:27 #5
og så lige to betragtninger der måske bare er skrive fejl - men som faktisk har indflydelse på resultatet:

$strSQL="SELECT * FROM us_hold WHERE us_hold.kategori_id = 1";
burde være $strSQL="SELECT * FROM us_hold WHERE us_hold.kategori_id = 4";

while($data = mysql_fetch_array($result) {

burde være while($data = mysql_fetch_array($result)) {

( mangler parantes til sidst i while betingelse...

Måske petitesser - men måske en fejl ?
Avatar billede apache999 Nybegynder
13. december 2003 - 12:35 #6
nissemand
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