#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]);