2016-05-16 10 views
0

Auf meinem Webserver kann ich get_result() nicht in meinen PHP-Skripten verwenden. Ich erhalte den Fehler Aufruf zu undefinierter Methode mysqli_stmt :: get_result.json_encode ohne get_result()

Aber bind_result() und fetch() funktioniert, aber ich muss die verschiedenen Spalten jedes Mal je nach SELECT-Ergebnis deklarieren, aber ich möchte es generisch.

Der nächstgelegene ich mit dem folgenden Code erhielt, war:

   function bind_result_array($stmt) 
       { 
        $meta = $stmt->result_metadata(); 
        $result = array(); 
        while ($field = $meta->fetch_field()) 
        { 
         $result[$field->name] = NULL; 
         $params[] = &$result[$field->name]; 
        } 

        call_user_func_array(array($stmt, 'bind_result'), $params); 
        return $result; 
       } 

       function getCopy($row) 
       { 
        return array_map(create_function('$a', 'return $a;'), $row); 
       } 

       $stmt = $mysqli->prepare("SELECT 1 as userId, 2 as message UNION SELECT 3 as userId, 4 as message"); 
       $stmt->execute(); 

       $row = bind_result_array($stmt); 
       if(!$stmt->error) 
       { 
        while($stmt->fetch()) 
        $genericArray[$row['userId']] = getCopy($row); 
       } 

       echo "{ \"userId\": "; 
       echo json_encode($genericArray); 
       echo "}"; 

       $stmt->close(); 
       $mysqli->close(); 

Der Ausgang dieses ist:

{ "userId": { "1": { "userId" : 1, "message": 2 }, "3": { "userId": 3, "message": 4 } } }

Obwohl es sein sollte:

{ "userId": [{ "userId": 1, "message": 2 }, { „userId „: 1, "message": 2 }] }

Ho W bekomme ich diese zusätzliche Ebene aus der JSON-Antwort und mache sie zu einem Array im JSON-Format? Oder gibt es eine andere Möglichkeit, das SELECT-Ergebnis im JSON-Format zu erhalten, ohne den Code jedes Mal zu ändern.

+0

Problem ist in Zeile '$ genericArray [$ Zeile ['country_id']] = getCopy ($ Zeile);' Es gibt keinen Wert für country_id in Ihrem Ergebnis. Daher dass "" –

+0

danke für Ihren Kommentar. Aber es hat mir nur klar gemacht, dass meine Frage nicht richtig gestellt wurde. Eigentlich ist mein Ziel Array im JSON ([...]) auch. Ich schätze, ich brauche immer noch Hilfe. – Graffl

Antwort

0

Sie Ihre Array-Schlüssel in dem folgenden Code explizit festlegen:

if(!$stmt->error) 
{ 
    while($stmt->fetch()) 
    $genericArray[$row['userId']] = getCopy($row); 
} 

Um den JSON Ausgabe erhalten Sie Sie wollen stattdessen folgendes zu tun:

if(!$stmt->error) 
{ 
    while($stmt->fetch()) 
    $genericArray[] = getCopy($row); 
} 

Wenn Sie Ich habe das erste Snippet für die Deduplizierung verwendet, dann würde ich das stattdessen in SQL empfehlen.