Về mặt kỹ thuật, bạn đang đi sai đường với điều đó. MySQL được sử dụng để lưu trữ riêng biệt từng ID / VALUE của bạn. Vì lợi ích của việc KHÔNG thay đổi mã của bạn, chúng tôi sẽ xem xét giải pháp của bạn trước nhưng sau đó tôi sẽ giải thích cách làm "tốt hơn".
Trước tiên, bạn cần đặt JSON của mình dưới dạng một biến, không phải là một phần của SQL:
mysql_query("INSERT INTO text (data) VALUES (".mysql_real_escape_string(array(json_encode('id' => $uid, 'value' => 'yes'))).")");
thay vì
mysql_query("INSERT INTO text (data) VALUES (json_encode('id' => $uid, 'value' => yes))");
Phần đầu tiên này sẽ cho phép bạn ít nhất thay vào đó dữ liệu chính xác vào mysql. Tôi đang ASSUMING bảng của bạn có một ID và bạn sẽ sử dụng nó để cập nhật hoặc xóa
Khi truy xuất dữ liệu của mình, bạn có thể json_decode
$row['data']
để lấy lại dữ liệu của bạn từ hàng và làm việc với nó. Để cập nhật nó, chỉ cần làm:
mysql_query("UPDATE text SET data = "'.mysql_real_escape_string(json_encode($myJsonToBeData)).'" WHERE rowid = '.$myrowid)
Bây giờ, để có cách ĐÚNG để thực hiện việc này:
Cách phù hợp để thực hiện việc này là đưa các trường này vào bảng của bạn:ID, JSONID, JSONVALUE và sử dụng SQL này thay thế:
SELECT * FROM text WHERE id = $rowid
INSERT INTO text VALUES(NULL, $jsonid, $jsonvalue)
UPDATE text SET jsonid = $jsonid, jsondata = $jsondata
Điều này khá cơ bản, nhưng nó sẽ cho phép bạn có bất kỳ số lượng mục nhập nào trong cơ sở dữ liệu của mình để có thể tìm kiếm, lập chỉ mục, có thể sắp xếp, có thể truy vấn, v.v.