Gå til innhold

While loop knekker på en server, fungerer på en annen?


Anbefalte innlegg

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 av Feh
Lenke til kommentar
Videoannonse
Annonse

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

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 av Feh
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...