2016-04-22 3 views
-2

Ich versuche, PDO zu verwenden, um den Wert wurde in der Datenbank gespeichert. Aber weiß nicht, warum der Wert scheint, kann es nicht widerhallen.PHP PDO kann nicht Json-Wert in der Datenbank

Hier ist mein Code:

$_GET['id']='138b39bbef558cf44b3d222a6fb4d6b6'; 
     $query3 = $conn->prepare("SELECT id, MAX(time),answer FROM `answer` where nodes_uuid = :nodeuuid and user_id = 101"); 
     $query3->bindValue(':nodeuuid', $_GET['id'], PDO::PARAM_STR); 
     $query3->execute(); 
$questionCorrectAnswer = $query3->fetch(); 
     echo $questionCorrectAnswer['answer']; 

Tabelle:

id   MAX(time)     answer 
---------- -------------------  ------------ 
    40  2015-02-25 18:18:53  [{"topicId":"1590","ans":["6032"]},"topicId":"1593","ans":["8122"]},{"topicId":"1598","ans":["6064"]},{"topicId":"1601","ans":["6073"]}] 
+0

Immer [Fehlerberichte aktivieren] (https://blog.flowl.info/2013/enable-display-php-errors/). Sie können zumindest eine 'Warnung: undefinierter Index 'Antwort'-Nachricht erhalten. 'PDOStatement :: fetch()' gibt 'false' bei Fehler zurück, Gegencheck das mit'! == '. – DanFromGermany

+0

Was sagt xdebug oder ein var_dump über '$ questionCorrectAnswer ['answer']'? – ceadreak

+0

Was ist der Wert von $ Conn? –

Antwort

-1

denke ich, was falsch ist hier ist, dass Sie einen nicht definierten Indexfehler bekommen. Sie könnten versuchen, tauschen:

$questionCorrectAnswer = $query3->fetch(); 

Für

$questionCorrectAnswer = $query3->fetch(PDO::FETCH_OBJ); 

Und statt

questionCorrectAnswer['answer'];

würde ich vorschlagen,

questionCorrectAnswer->answer;

versuchen

Auch wenn Sie ein Json-Objekt speichern, kann es sich auszahlen, Print_r ($ foo) oder Var_Dump ($ foo) nur, wenn eine Konvertierung von Array zu String fehlgeschlagen ist.

+2

Oder verwenden Sie '$ query3-> fetch (PDO :: FETCH_ASSOC)' mit '$ questionCorrectAnswer ['antwort']' – Andrew

+0

Stimmt, dass ich gerade -> über [''], denke ich nur, es ist viel hübscher. Es wird sowieso nicht funktionieren, jetzt haben wir gesehen, dass sein Var Dump leer ist. – Doug

+0

@Andrew das Ergebnis war wie folgt: Array (3) {["ID"] => NULL ["MAX (Zeit)"] => NULL ["Antwort"] => NULL} –

1

Das Ergebnis:

array(6) { ["id"]=> NULL [0]=> NULL ["MAX(time)"]=> NULL [1]=> NULL ["answer"]=> NULL [2]=> NULL } 

, die Sie bekommen, zeigt Ihre Abfrage keine Datensätze zurückgegeben. In einer normalen Abfrage erhalten Sie eine leere Menge, jedoch , da Sie eine Aggregatfunktion verwenden, erhalten Sie alle Nullen, wenn keine Datensätze von der Abfrage ausgewählt werden. Das Problem hier ist, dass Ihre WHERE-Klausel wahrscheinlich alle Datensätze in der Tabelle eliminiert.

+0

thx, ur comment.aber die Daten waren in der Datenbank. bevor ich diese Frage poste, habe ich meine Datenbank überprüft. –

+0

@LiouJay Dies kann der Fall sein, aber tritt die Kombination von nodes_uuid = '138b39bbef558cf44b3d222a6fb4d6b6' und user_id = 101 auf demselben Datensatz auf? – jpheldson

+0

Ja, das Ergebnis ist gleich. –