Feh Skrevet 27. juni 2013 Del Skrevet 27. juni 2013 (endret) Har kommet borte i et veldig spesielt problem. I et script kjøres en while loop inne i en annen while loop for å populere en tabell. På min webserver hvor denne løsningen kjører med en mysql database fungerer dette helt fint. På min lokale maskin kjører det også knirkefritt både med mysql og mssql med WAMP. Men på kunden sin server vil det ikke fungere. Eneste forskjellen mellom kundens og min lokale server hvor vi kjører løsningen mot en mssql database vha. sqlsrv extension er at de har PHP 5.3.24, mens jeg har 5.4.3 og muligens mindre forskjeller i config, men stort sett standardoppsett. Alle tre servere kjører Apache 2.2.22. Kunden har dog en annen versjon av sqlsrv (forskjellige versjoner for 5.3 og 5.4), men jeg har brukt begge på min maskin og begge fungerer. En annen ting er at jeg tror de bruker en vesentlig eldre versjon av mssql databasen, men vet ikke om det kan ha noe å si? Min base er laget i SQL Server 2012, mens deres er 2003 eller 2005 tror jeg. Koden som kjøres er noe ala følgende (bare for å gi et inntrykk av den): Denne kodesnutten skriver ut en tabell med brukere. Så om jeg har 10 brukere som møter et kriterium printer den ut en tabell med disse 10. Det som skjer på kundens server derimot, er at kun den siste raden skrives ut, resten spytter ut en sqlsrv error (Warning: sqlsrv_fetch_array() expects parameter 1 to be resource, boolean given in [path] on line 45). Line 45 er merket ut i koden. $fetch skriver ut "sqlsrv_fetch_array". $get_user_group=("SELECT * FROM users WHERE condition='$condition'"); $user_group_result=$query($connect, $get_user_group) or die(); while($row=$fetch($user_group_result)) { $id=$row['id']; $get_user_info=$query($connect, "SELECT * FROM users WHERE id='$id'"); while($row=$fetch($get_user_info)) { //<-- Line 45 echo('<tr id="'.$row['id'].'">'); include("php/populate_table_fields.php"); //masse <td>...</td> som populerer radene med felter echo('</tr>'); } } Endret 27. juni 2013 av Feh Lenke til kommentar
Ekko Skrevet 27. juni 2013 Del Skrevet 27. juni 2013 Sjekk verdien av $getuserinfo før du kjører andre while-løkken. Den er antakeligvis "false" fordi første spørringen feilet. Hvis det stemmer kan du begynne å sjekke opp der. Legg inn på linje 44 if($get_user_info=== FALSE) { die(mysql_error()); } eller evt var_dump($get_user_info); Lenke til kommentar
Feh Skrevet 28. juni 2013 Forfatter Del Skrevet 28. juni 2013 (endret) Jeg var nede hos kunden i dag og testet. Det som skjer er at den innerste while-loopen kun kjører den siste spørringen som blir skrevet ut. I et konkret eksempel skriver den ut fire insert setninger på rad, men bare den siste blir faktisk kjørt, og den gir ingen feilmeldinger. Det jeg istedet gjorde siden jeg ikke forstår hvorfor det ikke virker var å kjøre verdiene fra den ytterste while loopen inn i et array, for så å kjøre en foreach key -> value på det arrayet slik at jeg fikk avsluttet løkken før jeg løp igjennom resultatet og da fungerte det fint. Edit: Det jeg skrev om her gjalt et lignende problem et annet sted, ikke direkte relatert til eksempelet over, men i prinsippet det samme siden jeg kjørt en while inne i en annen while. Endret 28. juni 2013 av Feh Lenke til kommentar
slacky Skrevet 30. juni 2013 Del Skrevet 30. juni 2013 Jeg la merke til at du inkluderer en fil i loopen, kast prosessen (som kjøres i den nesta loopen) inn i en funksjon. Da slipper du unna en masse overhead. require_once("php/populate_table_fields.php"); $get_user_group=("SELECT * FROM users WHERE condition='$condition'"); $user_group_result=$query($connect, $get_user_group) or die(); while($row=$fetch($user_group_result)) { $id=$row['id']; $get_user_info=$query($connect, "SELECT * FROM users WHERE id='$id'"); while($row=$fetch($get_user_info)) { //<-- Line 45 echo('<tr id="'.$row['id'].'">'); populate_table_fields(); //noe i den duren. echo('</tr>'); } } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå