Tecnicamente, você está indo no caminho errado com isso. MySQL é usado para armazenar cada um dos seus ID/VALUE separadamente. Para NÃO alterar seu código, veremos sua solução primeiro, mas depois explicarei a maneira "melhor" de fazê-lo.
Primeiro, você precisa fazer seu JSON como uma variável, não como parte do seu SQL:
mysql_query("INSERT INTO text (data) VALUES (".mysql_real_escape_string(array(json_encode('id' => $uid, 'value' => 'yes'))).")");
ao invés de
mysql_query("INSERT INTO text (data) VALUES (json_encode('id' => $uid, 'value' => yes))");
Esta primeira parte permitirá que você pelo menos coloque os dados corretamente no mysql. Presumo que sua tabela tenha um ID e que você a usará para atualizar ou excluir
Ao recuperar seus dados, você pode
json_decode
o $row['data']
para recuperar seus dados da linha e trabalhar com eles. Para atualizá-lo, basta fazer:mysql_query("UPDATE text SET data = "'.mysql_real_escape_string(json_encode($myJsonToBeData)).'" WHERE rowid = '.$myrowid)
Agora, para a maneira CERTA de fazer isso:
A maneira correta de fazer isso seria ter esses campos em sua tabela:ID, JSONID, JSONVALUE e usar este SQL:
SELECT * FROM text WHERE id = $rowid
INSERT INTO text VALUES(NULL, $jsonid, $jsonvalue)
UPDATE text SET jsonid = $jsonid, jsondata = $jsondata
Isso é bastante básico, mas permitirá que você tenha qualquer número de entradas em seu banco de dados que o tornem pesquisável, indexado, classificável, consultável, etc ...