Как мне добавить MYSQL JSON

#php #mysql #serialization

#php #mysql #сериализация

Вопрос:

У меня в базе данных появляется следующее, когда я запускаю SELECT type ИЗ office;

  -------------------------------------------------------- 
| type                                                   |
 -------------------------------------------------------- 
| a:2:{i:0;s:16:"Shared Workspace";i:1;s:9:"Workshops";} |
 -------------------------------------------------------- 
  

Как я могу добавить дополнительное значение JSON для другого типа office. В принципе, я бы хотел, чтобы он добавил тип «Частные офисы». Таким образом, значение в моей базе данных будет выглядеть следующим образом:

  ----------------------------------------------------------------------------------- 
| type                                                                              
 ----------------------------------------------------------------------------------- 
| a:3:{i:0;s:16:"Shared Workspace";i:1;s:9:"Workshops";i:2;s:15:"Private Offices";} |
 ----------------------------------------------------------------------------------- 
  

Комментарии:

1. Это не JSON, это serialize() формат PHP.

2. Вы должны прочитать это с помощью PHP, вызвать unserialize() , поместить новое значение в массив, снова сериализовать его, затем обновить базу данных.

Ответ №1:

Это не формат JSON. Это похоже на вывод функции serialize() PHP.

Нет функции SQL для добавления значений к сериализованным данным PHP. Вы должны извлечь его в PHP-приложение, разсериализовать () его в PHP-массив, затем добавить данные в PHP-массив и обновить их обратно в базу данных.

Что-то вроде следующего (некоторые детали были опущены, например, условия WHERE для конкретной строки, на которую вы ссылаетесь).

 <?php

$pdo = new PDO(...);
$typeSerialized = $pdo->query("SELECT type FROM office WHERE ...")->fetchColumn();
$typeArray = unserialize($typeSerialized);
$typeArray[] = "Private Offices";
$typeSerialized = serialize($typeArray);
$stmt = $pdo->prepare("UPDATE office SET type = ? WHERE ...");
$stmt->execute([$typeSerialized]);