2016-05-05 15 views
0

Ich habe Probleme beim Abrufen meines Ergebnisses von db und konvertieren in JSON. In meinem API-Aufruf, es mir leeren Inhalt gibt (total leer) zurückgegebener Körper mit Status 200.PHP MySql fetch json kein Inhalt

Dies ist mein Code:

$weekAndYear = $year."/".$week; // incoming params as e.g "2016/19" 

    $stmt = $this->db->prepare("SELECT r.*, p.code FROM report r, product p WHERE " 
      . "r.pid=p.pid AND r.product=:productCode " 
      . "AND r.status='Published' AND r.pid=25 AND r.week=:weekAndYear"); 
    $stmt->bindparam(":productCode", $productCode); 
    $stmt->bindparam(":weekAndYear", $weekAndYear); 
    $stmt->execute(); 

    while($price=$stmt->fetch(PDO::FETCH_ASSOC)) { 
     //echo $price; 
     $arr_price[] = $price; 
    } 


    $data['priceReport'] = $arr_price; 


    //echo $weekAndYear; 
    $data['status'] = "OK"; 

    return json_encode($data); 

Wenn ich die Abfrage in meinem phpMyAdmin MySQL-Server getestet und es funktioniert fein.

Auf meiner PHP-Seite werden verschiedene $ weekAndYear-Params einige gut funktionieren und andere nicht. Alles falsch am Array-Teil?

Meine API-Antwort-Header:

Cache-Control →no-store, no-cache, must-revalidate, post-check=0, pre- 
    check=0 
    Connection →Keep-Alive 
    Content-Length →0 
    Content-Type →application/json 
    Date →Thu, 05 May 2016 06:49:28 GMT 
    Expires →Thu, 19 Nov 1981 08:52:00 GMT 
    Keep-Alive →timeout=5, max=100 
    Pragma →no-cache 
    Server →Apache/2.4.18 (Unix) LibreSSL/2.2.6 PHP/5.5.31 
    X-Powered-By →PHP/5.5.31 

Ich habe meinen Kopf für ein paar Tage wurde Kratzen und jetzt habe ich nur ein paar Haare gelassen.

Bitte helfen. Vielen Dank.

+0

haben Sie versucht, die Variable $ data Anmeldung zu sehen, wenn es leer ist? – middlestump

+0

Da Sie keine Funktion verwenden, schreiben Sie echo json_encode ($ data); –

+0

Dies ist in PHP-Klasse geschrieben, deshalb verwende ich Return, aber in meiner anderen Funktion, Rückkehr und Echo funktioniert gut. Auf dem $ weekAndYear-Param, als ich zu 2016/18 änderte, funktioniert es, aber als ich 2019/19 tippte, tat es nicht, 2016/17 funktioniert es, ... einige funktionieren gut, aber einige nicht. Aber für alle diese Fragen funktionieren die Abfragen auf der phpmyadmin-Seite. – felixwcf

Antwort

0

Ich nehme an (vielleicht falsch), dass Ihr Code-Snippet keine Funktion ist. die letzte Zeile Ändern von Rückkehr echo wie folgt:

echo json_encode($data); 
+0

Ich habe es getestet, aber es wird das Problem nicht lösen. echo und return machen den gleichen Trick und es funktioniert gut. – felixwcf

0

Es sei denn, der erste Code-Schnipsel eine Funktion ist, müssen Sie json_encode keine return-Anweisung verwenden.

Was passiert ist, dass Fetch jede Art von Inhalt abrufen kann, sogar HTML. Was PHP tut ist, dass es Inhalte generiert, in eine Datei schreibt und an den Browser sendet. Wenn Sie HTML mit PHP generieren, geben Sie es nicht zurück, Sie echo es auf die Seite.

Das gleiche passiert mit AJAX. Sie verwenden PHP, um Daten in eine Datei zu schreiben und sie zu verarbeiten.

diese So ersetzen:

return json_encode($data); 

mit diesem:

echo json_encode($data);