2016-07-10 6 views
1

Ich habe den folgenden Code:Wie man php array zweimal aufruft, ohne Ergebnisse zu verlieren?

$qry = "SELECT * FROM Table WHERE..."; 
$result = $db->query($qry); 
$if($db->error)die($db->error); 

Das eine Reihe von 15 Studenten zurückgibt. Mein Code wird dann als solche:

$faculty= $result->fetch_assoc(); 
if ($faculty['field'] == 1) 
    die(); 

while($students = $result->fetch_assoc()) { 
    /*display all students*/ 
} 

Das Problem, das ich habe, ist, dass meine while-Schleife nur 14 Studenten angezeigt wird, wenn ich es brauche alle 15. Ich der erste Student glauben anzuzeigen verloren geht, wenn ich Verwendung:

$faculty= result->fetch_assoc(); 

jedoch, dass ich dachte, weil meine while Schleife auf dem ursprünglichen $result Array ruft würde ich nicht davon betroffen sein.

Kann mir jemand erklären, was hier passiert? Wie kann ich dasselbe Array zweimal verwenden, ohne meine Datenbank erneut abfragen zu müssen und ohne dieses erste Ergebnis zu verlieren?

+0

Jedes '$ result-> fetch_assoc' iteriert die Ergebnismenge einmal. Warum nicht 'wo Feld <> 1'? – chris85

Antwort

1

Das passiert, weil jedes Mal, wenn Sie fetch_assoc aufrufen, es die aktuelle Zeile zurückgibt und den Zeiger auf die nächste Zeile verschiebt. Sie können data_seek verwenden Sie den Ergebniszeiger auf eine beliebige Zeile in der Ergebnis anzupassen:

$result->data_seek(0); 

Ihr Code wie folgt aussehen wird:

$faculty= $result->fetch_assoc(); 
if ($faculty['field'] == 1) 
    die(); 
$result->data_seek(0); 
while($students = $result->fetch_assoc()) { 
    /*display all students*/ 
} 

Ich hoffe, dies wird Ihnen helfen.

+0

Bitte überprüfen Sie meine aktualisierte Antwort. –

+0

Sie brennen heute Ismail. 'data_seek' scheint den Job erledigt zu haben. Vielen Dank! – monkeyman

+0

Gern geschehen: D –

0

Sie müssen das Ergebnis nicht in die Fakultät Variable überhaupt platzieren.

$qry = "SELECT * FROM Table WHERE..."; 
$result = $db->query($qry); 
$if($db->error)die($db->error); 
// Check to see if Result is Empty 
if(mysql_num_rows($result) == 0) { 
    echo("No Information in Result"); 
} else { 
    while($row = mysql_fetch_array($result) { 
    //Do Some Code Here 
    //display students with $row variable 
    echo($row['student_name'] . "<br />"); 
    echo($row['student_age']); 
    } 
} 
+0

Leider überprüfe ich nicht nur, ob meine Anfrage Daten zurückgegeben hat. 'if (faculty ['field'] == 1)' prüft tatsächlich den Wert des Feldes, nicht nur, ob es leer ist oder nicht. – monkeyman