este problema se puede solucionar de variadas formas, pero en este caso te compartimos la que en nuestra opinión es la respuesta más completa.
Solución:
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 identificación y que la usará para actualizar o eliminar
Cuando recupera sus datos, puede json_decode
los $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, para 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, clasificable, consultable, etc.
Puede hacer esto de manera más eficiente NO almacenando JSON en un solo campo sino creando una tabla MySQL adecuada con los nombres de propiedad del objeto JSON como nombres de campo.
Almacenar un texto-string La representación codificada de sus datos en una base de datos destruye por completo el punto de usar bases de datos en primer lugar.
Sí, pero… WordPress almacena muchos de sus datos como cadenas JSON codificadas, como las capacidades del usuario. almacenar un array ya que un bit discreto de datos elimina tener que hacer múltiples lecturas en la base de datos y le permite obtener una gran cantidad de datos en una sola lectura. Si nunca ve la necesidad de SELECCIONAR las partes individuales del JSON string No veo por qué no es aceptable hacerlo de esta manera. MySQL también debe pensarlo porque tiene funciones para permitir un SELECCIONAR en los campos individuales dentro de un JSON string si así lo desea (ver MySQL EXPLAIN palabra clave). Pero estoy de acuerdo si iba a hacer muchas SELECCIONES en un campo, debería tener uno propio. Todo depende de cómo vayas a utilizar los datos.
Si sostienes algún recelo o capacidad de aclarar nuestro enunciado puedes añadir una glosa y con gusto lo estudiaremos.