Beste,

Ik kom er niet meer uit, wellicht zien jullie waar het probleem zit?
Ik heb een array en die haal ik door json_encode, sla hem op in de database en haal deze later weer op. Vervolgens doe ik json_decode maar krijg ik errorcode 4, wat wilt zeggen dat mijn json string incorrect is.
Als ik de string echo klopt hij echter wel.

<?php
$aTempLessen = array ( 'Dynamisch en lang.' );
$sTempLessen = json_encode ( $aTempLessen );

mysql_query ( "INSERT INTO klassen ( datagrid ) VALUES ( '" . $sTempLessen . "' )" ); // Staat nu netjes in DB!

// Andere pagina:
$query = mysql_query ( "SELECT datagrid FROM klassen" );
$fetch = mysql_fetch_assoc ( $query );
echo $fetch['datagrid'];
print_r ( json_decode ( $fetch['datagrid'], true ) );
?>

De echo:
{"1":{"4":{"rowspan":8,"classroom":"B2.01
","teacher":"SCHY","classname":"SIM"}}}

Print_r: Niks.
var_dump: NULL
json_last_error: JSON_ERROR_SYNTAX

Alvast bedankt voor de hulp!

Update:
Als ik de json string decode via phpfiddle gaat alles goed?...
Zit er misschien een limiet op json_decode?

Update 2:
Gevonden! Er stond nog een \r achter elk lokaal.. (Zie json hierboven), zucht...
Heb de json string ingekort :)
Wellicht moet je eens kijken naar MonoDB, een beetje onzin om niet relationele data op te slaan in een RDBMS, of anders gaan normaliseren.

Overigens had je het kunnen voorkomen door je input te escapen.
Beste Ger,

Bedankt voor je antwoord.
Ik heb 1 MySQL database tot mijn beschikking bij mijn webhosting, dus MongoDB zal geen optie zijn.
De reden waarom ik alles in de DB doe opslaan is omdat de lesdata extern geladen wordt via curl. Om dataverkeer te besparen wordt er om de 30 minuten gekeken of het rooster aangepast is, zo ja dan wordt dit gedownload en opgeslagen. Er gaan naar verwachting een kleine 10.000 leerlingen en leraren van deze service gebruik maken, om nu tijdens het genereren van de pagina de data extern op te halen en te verwerken leek mij overkill.

Als je een betere manier vind om de data op te slaan zonder andere software dan hoor ik dit graag.
Kijk eens naar serialize en unserialize

Reageren