Técnicamente, vas por el camino equivocado con eso. MySQL se utiliza para almacenar cada uno de sus ID/VALOR por separado. En aras de NO cambiar su código, primero veremos su solución, pero luego explicaré la "mejor" forma de hacerlo.
Primero, debe hacer que su JSON sea una variable, no parte de su SQL:
mysql_query("INSERT INTO text (data) VALUES (".mysql_real_escape_string(array(json_encode('id' => $uid, 'value' => 'yes'))).")");
en lugar de
mysql_query("INSERT INTO text (data) VALUES (json_encode('id' => $uid, 'value' => yes))");
Esta primera parte le permitirá, al menos, introducir correctamente los datos en mysql. ASUMO que su tabla tiene una ID y que la usará para actualizar o eliminar
Cuando recupera sus datos, puede json_decode
el $row['data']
para recuperar sus datos de la fila y trabajar con ellos. Para actualizarlo, solo haz lo siguiente:
mysql_query("UPDATE text SET data = "'.mysql_real_escape_string(json_encode($myJsonToBeData)).'" WHERE rowid = '.$myrowid)
Ahora, la forma CORRECTA de hacer esto:
La forma correcta de hacer esto sería tener estos campos en su tabla:ID, JSONID, JSONVALUE y usar este SQL en su lugar:
SELECT * FROM text WHERE id = $rowid
INSERT INTO text VALUES(NULL, $jsonid, $jsonvalue)
UPDATE text SET jsonid = $jsonid, jsondata = $jsondata
Esto es bastante básico, pero le permitirá tener cualquier cantidad de entradas en su base de datos que la hagan buscable, indexada, ordenable, consultable, etc...