MySQL Daten per php Script auslesen

  • 18 Antworten
  • Letztes Antwortdatum
D

DrLiightninG

Neues Mitglied
1
Hallo zusammen,
ich habe ein php Script geschrieben, welches mir die Daten aus meiner MySQL Datenbank auslesen soll, damit ich sie später in meiner App verwenden kann.
Wenn ich das Script jedoch bei JSONLint - The JSON Validator. teste, erhalte ich lediglich folgendes Resultat:
Code:
{
    "server_response": []
}

Die Datenbank hat zwei Datensätze, die eigentlich ausgelesen werden sollten. Ich finde jedoch meinen Fehler nicht.

Hier das php Script:
PHP:
<?php

$db_name = "(..)"; //Anstelle von "(..)" stehen hier natürlich die richtigen Daten
$mysql_user = "(..)";
$mysql_pass = "(..)";
$server_name = "(..)";

$con = mysqli_connect($server_name, $mysql_user, $mysql_pass, $db_name);

$sql_query = "SELECT * FROM `partydaten`";

$result = mysql_query($con,$sql_query);

$response = array();

while($row = mysql_fetch_array($result))
{
    array_push($response,array("id"=>$row[0],"party_name"=>$row[1],"club_name"=>$row[2],"veranstalter"=>$row[3],"datum"=>$row[4],"zeit"=>$row[5],"age"=>$row[6],"adresse"=>$row[7],"stadt"=>$row[8],"plz"=>$row[9],"ticketverkauf"=>$row[10],"zusagen"=>$row[11]));
}

echo json_encode(array("server_response"=>$response));

mysql_close($con);

?>

Hat jemand eine Idee, wo der Fehler liegen könnte?
 
Hallo DrLiightninG
Hast du es mal ohne "server_response", also nur mit folgendem probiert:
Code:
echo json_encode($response);

Du kannst übrigens auch direkt alle Daten, mit dem selben Aufbau wie in der Datenbank, im Json Format ausgeben:
Code:
while($row=mysql_fetch_assoc($sql_query))
		$response=$row;
print(json_encode($response));
 
Feuerstern schrieb:
Hallo DrLiightninG
Hast du es mal ohne "server_response", also nur mit folgendem probiert:
Code:
echo json_encode($response);

Du kannst übrigens auch direkt alle Daten, mit dem selben Aufbau wie in der Datenbank, im Json Format ausgeben:
Code:
while($row=mysql_fetch_assoc($sql_query))
        $response=$row;
print(json_encode($response));

Danke für deine Antwort. Jedoch funktioniert beides nicht.
Könnte es daran liegen, dass in der MySQL Tabelle die Spalte "id" und "zusagen" als int gespeichert werden? Der Rest wird als Text gespeichert.
 
Das sollte eigentlich kein Problem sein. Wie sieht die Json Datei den aus bevor du sie durch den Validator jagst?

Grüße
 
Was ist denn überhaupt der Fehler bzw. dein Problem? Gibt das PHP-Skript gar nix aus? Oder nur ein leeres JSON Array? Kommt eine Fehlermeldung?
Erstmal solltest du dich entscheiden ob du mysql_* oder mysqli_* verwendet, ob das gemixt geht weiß ich nicht. Du benutzt mysqli_connect, aber danach mysql_* ..
Ansonsten einfach mal mit print_r() oder var_dump() den Inhalt der Variablen an unterschiedlichen Stellen ausgeben und gucken, obs bis dahin passt. Wenn etwas SQL seitig nicht stimmt, kannst du den letzten Fehler mit mysqli_error abrufen.
Passt was im PHP-Code nicht, kannst du die Ausgabe von Fehlern mit error_reporting(E_ALL) und ini_set("display_errors", 1) aktivieren
 
burgerohnealles schrieb:
Was ist denn überhaupt der Fehler bzw. dein Problem? Gibt das PHP-Skript gar nix aus? Oder nur ein leeres JSON Array? Kommt eine Fehlermeldung?
Erstmal solltest du dich entscheiden ob du mysql_* oder mysqli_* verwendet, ob das gemixt geht weiß ich nicht. Du benutzt mysqli_connect, aber danach mysql_* ..
Ansonsten einfach mal mit print_r() oder var_dump() den Inhalt der Variablen an unterschiedlichen Stellen ausgeben und gucken, obs bis dahin passt. Wenn etwas SQL seitig nicht stimmt, kannst du den letzten Fehler mit mysqli_error abrufen.
Passt was im PHP-Code nicht, kannst du die Ausgabe von Fehlern mit error_reporting(E_ALL) und ini_set("display_errors", 1) aktivieren

mysqli_error() liefert mir keinen Fehler. Auch jason-lint meckert nicht. Stattdessen bekomme ich ein leeres Array ausgegeben, wie in meinem ersten Post gezeigt. Ob ich nun mysqli oder mysql zum Verbinden verwende, macht keinen Unterschied. Dies habe ich auch versucht.
 
Versteh ich das richtig das dir nach dem Aufruf des Scripts noch einige Daten (mehr als nur das untere "server response") angezeigt werden und erst nach dem testen im Validator nur noch:
Code:
{
    "server_response": []
}
angezeigt wird?
Und hast du mal den Vorschlag von burgerohnealles mit var_dump ausprobiert?

Grüße
 
Feuerstern schrieb:
Versteh ich das richtig das dir nach dem Aufruf des Scripts noch einige Daten (mehr als nur das untere "server response") angezeigt werden und erst nach dem testen im Validator nur noch:
Code:
{
    "server_response": []
}
angezeigt wird?
Und hast du mal den Vorschlag von burgerohnealles mit var_dump ausprobiert?

Grüße

Bisher habe ich meine php Script folgendermaßen ausprobiert:
Ich habe sie auf meinem PC geschrieben und anschließend auf meinem Webspace hochgeladen. Nun konnte ich sie über meinen Browser durch die URL aufrufen und mir die Ausgabe des Scripts ansehen (domain.de/script.php).
Durch die Verwendung von json ist dies jedoch nicht mehr möglich. Hier benötige ich den json Lint Validator, welcher mir lediglich "server_response" und ein leeres Array ausgibt. In diesen Validator muss ich, ebenso wie beim Browser, nur die url zum php Script angeben und bekommen dann die besagte Ausgabe.

"var_dump" habe ich nicht ausprobiert, da ich nicht weiß, wie ich diese Funktion nutzen muss.

Gruß
 
var_dump() ist eine funktion die dir alle Informationen über eine bestimmte Variable ausgibt.
In deinem Fall also:
Code:
var_dump($result);
Wichtig ist das du das ganze nach folgendem Befehl machst:
Code:
$result = mysql_query($con,$sql_query);
Also:
Code:
$result = mysql_query($con,$sql_query);
var_dump($result);
 
Feuerstern schrieb:
var_dump() ist eine funktion die dir alle Informationen über eine bestimmte Variable ausgibt.
In deinem Fall also:
Code:
var_dump($result);
Wichtig ist das du das ganze nach folgendem Befehl machst:
Code:
$result = mysql_query($con,$sql_query);
Also:
Code:
$result = mysql_query($con,$sql_query);
var_dump($result);

Ich habe das jetzt so ausprobiert, wie du es beschrieben hast und folgende Ausgabe bei json Lint erhalten:

Code:
NULL {
    "server_response": []
}

Demnach scheint "$result" leer zu sein. Warum dies so ist, kann ich mir jedoch nicht erklären, da in der MySQL Datenbank zwei Datensätze vorhanden sind.
 
Teste mal ob mit deiner Verbindung was nicht stimmt:
Code:
if (!$con) {
    die("connection error: " . mysqli_connect_error());
}
Der Code Teil sollte direkt nach mysqli_connect(...) kommen.
Du hast zwar schon geschrieben das du mysqli_error() benutzt hast, aber probiere es trotzdem mal. Und füge nach dem mysqli_query() folgendes ein (hattest du vlt das echo vergessen, oder der Funktion keinen Parameter mit übergeben?):
Code:
echo "Error description: " . mysqli_error($con);
Und du solltest auf jeden Fall überall mysqli benutzen anstelle von mysql. Die mysql Api ist veraltet und wird in Zukunft nicht mehr unterstützt.

Hat es eigentlich irgendeinen Grund das du dein Script nicht direkt im Browser aufrufst, sondern mit dem JSON-Validator?
 
Feuerstern schrieb:
Teste mal ob mit deiner Verbindung was nicht stimmt:
Code:
if (!$con) {
    die("connection error: " . mysqli_connect_error());
}
Der Code Teil sollte direkt nach mysqli_connect(...) kommen.
Du hast zwar schon geschrieben das du mysqli_error() benutzt hast, aber probiere es trotzdem mal. Und füge nach dem mysqli_query() folgendes ein (hattest du vlt das echo vergessen, oder der Funktion keinen Parameter mit übergeben?):
Code:
echo "Error description: " . mysqli_error($con);
Und du solltest auf jeden Fall überall mysqli benutzen anstelle von mysql. Die mysql Api ist veraltet und wird in Zukunft nicht mehr unterstützt.

Hat es eigentlich irgendeinen Grund das du dein Script nicht direkt im Browser aufrufst, sondern mit dem JSON-Validator?

Nun bekomme ich zwar einen Fehler ausgegeben, erhalte jedoch trotzdem die Ausgabe der MySQL Datenbank:
Code:
Error description: object(mysqli_result) #2 (5) {
  ["current_field"]= >
    int(0)["field_count"] =>
    int(12)["lengths"] =>
    NULL["num_rows"] =>
    int(2)["type"] =>
    int(0)
} {
    "server_response": [{
        "id": "3",
        "party_name": "Name",
        "club_name": "Club",
        "veranstalter": "Veranstalter",
        "datum": "Datum",
        "zeit": "Zeit",
        "age": "Age",
        "adresse": "Adresse",
        "stadt": "Stadt",
        "plz": "PLZ",
        "ticketverkauf": "Tickets",
        "zusagen": "5"
    }, {
        "id": "4",
        "party_name": "White by night ",
        "club_name": "Revolution ",
        "veranstalter": "college break ",
        "datum": "heute",
        "zeit": "jetzt ",
        "age": "16",
        "adresse": "illinghauser weg 10b",
        "stadt": "neuss",
        "plz": "41470",
        "ticketverkauf": "bei mir",
        "zusagen": "0"
    }]
}

Mein php Script sieht nun folgendermaßen aus:
PHP:
<?php


$db_name = "..";
$mysql_user = "..";
$mysql_pass = "..";
$server_name = "..";

$con = mysqli_connect($server_name, $mysql_user, $mysql_pass, $db_name);

if (!$con) {
    die("connection error: " . mysqli_connect_error());
}

$sql_query = "SELECT * FROM partydaten";

echo "Error description: " . mysqli_error($con);

$result = mysqli_query($con,$sql_query);
var_dump($result);

$response = array();

while($row = mysqli_fetch_array($result))
{
    array_push($response,array("id"=>$row[0],"party_name"=>$row[1],"club_name"=>$row[2],"veranstalter"=>$row[3],"datum"=>$row[4],"zeit"=>$row[5],"age"=>$row[6],"adresse"=>$row[7],"stadt"=>$row[8],"plz"=>$row[9],"ticketverkauf"=>$row[10],"zusagen"=>$row[11]));
}

print mysqli_error();

print json_encode(array("server_response"=>$response));

mysql_close($con);

?>

Aus folgendem Grund nutze ich den JSON Validator:
Die Ausgabe über den Browser hat anfangs nicht funktioniert, als die Daten noch nicht ausgelesen wurden. Nun werden sie zwar ausgelesen und auch im Browser angezeigt, jedoch deutlich unübersichtlicher als beim JSON Validator.

Ich danke dir auf jeden Fall schon mal für deine tatkräftige Unerstützung Feuerstern!!
Am aller besten wäre es natürlich jetzt noch, wenn auch der Fehler verschwinden würde.

Gruß
Jan
 
Wo der Fehler herkommt weiß ich leider auch nicht, ist in der Tabelle alles richtig eingestellt?

Grüße
 
Meine Kenntnisse von php sind leider nur rudimentär. Aber wenn ich die Fehlermeldung richtig verstehe, liegt es an der Funktion mysqli_fetch_array.
Ich glaube, Du brauchst die Funktion mysql_fetch_row($result)).

SELECT – Daten selektieren und ausgeben - MySQL

Die Einträge in die Datenbank sehen auch komisch aus. Wenn ich richtig gesehen habe, ist "zusage" der Primärschlüssel. Nach der Definition der Tabelle wäre id als Primärschlüssel viel sinnvoller.

Zum Verständnis:
Normalisierung (Datenbank) – Wikipedia
Schlüssel (Datenbank) – Wikipedia
Referentielle Integrität – Wikipedia
 
markus.tullius schrieb:
Meine Kenntnisse von php sind leider nur rudimentär. Aber wenn ich die Fehlermeldung richtig verstehe, liegt es an der Funktion mysqli_fetch_array.
Ich glaube, Du brauchst die Funktion mysql_fetch_row($result)).

SELECT – Daten selektieren und ausgeben - MySQL

Die Einträge in die Datenbank sehen auch komisch aus. Wenn ich richtig gesehen habe, ist "zusage" der Primärschlüssel. Nach der Definition der Tabelle wäre id als Primärschlüssel viel sinnvoller.

Zum Verständnis:
Normalisierung (Datenbank) – Wikipedia
Schlüssel (Datenbank) – Wikipedia
Referentielle Integrität – Wikipedia

Für die Ausgabe bei JSON Lint macht es keinen Unterschied, ob ich mysql_fetch_row oder mysql_fetch_array verwende. Habe beides probiert. Die Ausgabe bleibt gleich.
Hier nochmal die JSON Lint Ausgabe als Screenshot:
http://img5.fotos-hochladen.net/uploads/jsonlintz5xla1w8qk.jpg

Wie entferne ich denn den Primärschlüssel von "zusagen"?

Gruß
Jan

PS: Thema ist erledigt. Der Fehler wurde gefunden.
 
Zuletzt bearbeitet:
Hallo,

könntest Du bitte posten, was Dein Fehler war?

Reine Neugier. Und vielleicht hilft es den nächsten, der das Problem hat.
 
markus.tullius schrieb:
Hallo,

könntest Du bitte posten, was Dein Fehler war?

Reine Neugier. Und vielleicht hilft es den nächsten, der das Problem hat.

Ich hatte zwei Zeilen in meinem php Skript, welche die Ausgabe bei JSON Lint vor dem validen JSON verursacht haben.
Nachdem ich die Zeilen "echo "Error description: " . mysqli_error($con);" und "var_dump($result);" entfernt habe, ging alles einwandfrei. Die echo Meldung kam nämlich in jedem Fall. Völlig egal, ob überhaupt ein Fehler vorhanden war. Und var_dump hat mir die Variablen ausgegeben, obwohl ich dies nicht brauchte. Dafür ist ja JSON zuständig.

Gruß
Jan
 
  • Danke
Reaktionen: markus.tullius
Danke, für die Info
 
Zurück
Oben Unten