2016-08-16 5 views
-3

Meine Verbindung zur Datenbank funktioniert gut. Meine Anwendung kann alle meine Daten anzeigen, mit Ausnahme der ersten Zeile. Wenn ich es lokal über die MySQL-Workbench ausführe, ruft es meine erste Zeile und danach jede Zeile ab. Es ist nur mein PHP-Code, der nicht die erste Zeile bekommt, und ich bin mir nicht sicher warum.PHP nicht meine erste Zeile aus MySQL-Datenbank auswählen

<?php 
//connect with database 
$connect= new mysqli($host,$user,$pass,$db) or die("ERROR:could not connect to the database!"); 


$query="select * from college"; 
$result=$connect->query($query); 


$jsonData = array(); 
while ($array = mysqli_fetch_assoc($result)) { 
    $jsonData[] = $array; 
} 

echo json_encode($jsonData); 
?> 
+4

Ich sehe nicht, aus irgendeinem Grund, warum dieser Code dieses Problem haben sollte. In der Vergangenheit, als die Leute dieses Symptom berichteten, lag es daran, dass sie vor der Schleife einen zusätzlichen Aufruf einer "Fetch" -Funktion hatten. Hast du das im echten Code? – Barmar

+0

Zeigen Sie alles zwischen Ihrer Abfrage und beim Starten der Abfrage von Ergebnissen an. Das Problem ist nicht in diesem Auszug. – BeetleJuice

+0

überprüfen Sie bitte das Ergebnis. 'print_r ($ array);' Platziere den Code innerhalb der Schleife. –

Antwort

1

Der Auszug Code, den Sie freigegeben haben, ist in Ordnung, also vermute ich, dass Ihr Problem von anderswo kommt. Was ich empfehle, wenn Sie beabsichtigen, mit allen Ergebnissen Ihrer Abfrage zu arbeiten, ist es, sie alle zu holen und dann zu verarbeiten, was Sie abgerufen haben. Dies schützt Sie davor, den Ergebniszeiger mit einem Aufruf, den Sie vergessen haben, weiterzuleiten und sich dann zu fragen, wohin Ihr erstes Ergebnis gegangen ist.

Statt:

while ($array = mysqli_fetch_assoc($result)) { 
    $jsonData[] = $array; 
} 

Do:

//remember to error-check before you try using the results of a query 
$result = $connect->query(...) or die($connect->error); 
$jsonData = $result->fetch_all(MYSQLI_ASSOC); 

Diese Änderung macht eine Kopie der Ergebnisse im Speicher, so dass es Ihr Skript mehr Ressourcen hungrig macht. Wenn Sie 500 oder 1.000 Ergebnisse haben, ist es wahrscheinlich egal, aber wenn Sie 500.000 oder 1.000.000 Ergebnisse haben, sollten Sie einen Benchmark durchführen, bevor Sie sich entscheiden.

+0

'SELECT *' ohne Bedingungen fragt immer nach Ärger, also haben Sie recht, wenn Sie hier vorsichtig sind. – tadman

+0

@tadman Guter Punkt. In diesem Fall ruft das OP alle Ergebnisse nacheinander ab. Am Ende der 'foreach' ist der Speicherdruck wahrscheinlich genauso groß wie wenn ein' fetch_all' verwendet würde, also ist meine Warnung vielleicht nicht so wichtig, wie ich zuerst dachte. – BeetleJuice

+0

Ich habe den Code wie vorgeschlagen ersetzt, konnte jedoch keine Verbindung zu meinem Server herstellen. Es gab mir einen HTTP 500 Fehler. – ndb1995

0

versuchen dies zu tun:

<?php 
$query = mysqli_query($con, "SELECT * FROM college"); 
while($row = mysqli_fetch_array($query)){ 

    $arr[] = $row; 

} 

$json = json_encode($arr); 
print $json; 
+0

Wie hilft das Problem? – showdev

+0

@showdev ist ein anderer Weg, es zu tun, könnte es funktionieren –

Verwandte Themen