No Image

Php json to mysql

СОДЕРЖАНИЕ
481 просмотров
10 марта 2020

Если вы работали с SQL базами данных, то наверняка согласитесь что проектировать структуру кажется проще, чем есть на самом деле. SQL базы данных верят в структуру, именно поэтому и называются Structured Query Language.

С другой стороны сегодня не менее популярные NoSQL базы данных, которые также называются schema-less – они жестко не привязаны к заданной структуре и не имеют структурных ограничений.

Конечно каждый инструмент имеет свою область применения, иногда требуются комбинированные решения. Что если вы можете жестко структурировать некоторые части приложения, а некоторые сделать гибкими? MySQL в версии 5.7.8 представил новый тип данных – JSON, которые позволяет решить эту проблему.

Зачем использовать JSON

На данный момент вы наверняка спрашиваете себя зачем нужно использовать JSON, когда MySQL итак неплохо справляется со своими функциями.

Давайте рассмотрим на примере. Допустим вы создаете веб-приложение где вам нужно сохранять пользовательские настройки в базе данных. Как правило вы можете создать отдельную страницу с полями id , user_id и values или сохранять их в некую форматированную строку и парсить в рантайме. Это неплохо работает если у вас немного пользователей. Если же у вас тысяча пользователей и пять конфигурационных ключей, то это уже пять тысяч записей, которые тем не менее составляют лишь малую часть вашего приложения. Разбор форматированной строки в рантайме лишь создает дополнительную нагрузку. Использование JSON в данном случае может сэкономить ваши ресурсы, уменьшить количество записей в базе и количество дополнительных запросов.

Структура

Перед тем как мы погрузимся в изучение JSON функционала, нам нужен пример базы для работы. Так что сначала набросаем структуру. Мы будем рассматривать случай использования интернет-магазина, где находится несколько брендов и множество электроники. Поскольку различные гаджеты имеют различные атрибуты (сравните Macbook с пылесосом), как правило используется модель Entity-Attribute-Value (EAV) модель. Но мы откажемся от нее, так как будем использовать JSON.

Читайте также:  Является ли wifi роутер технически сложным товаром

Наша база данных будет называться store и иметь три таблицы – brands , categories и products . Таблицы brands и categories будут очень похожи и иметь только поля id и name .

Цель этих двух таблиц – хранение категорий и брэндов наших продуктов. Добавим немного данных.

Теперь создадим таблицу products с полями id, name , brand_id , category_id и attributes`.

Наша структура определяет два внешних ключа для полей brand_id и category_id , ссылающихся на таблицы brands и categories соответственно.

Поле attributes было определено как JSON, что позволит нам использовать доступный в MySQL JSON-функционал для этого поля.

Вот такая структура базы данных у нас получилась в итоге.

CRUD операции

Давайте посмотрим как мы можем создавать, читать, обновлять и удалять данные в JSON полях.

Создание

Создание записи в таблице с JSON полем достаточно простое. Все что нужно – это добавить валидный JSON в значение этого поля в insert запросе.

Также вместо того, чтобы самому кодировать JSON объект вы можете использовать встроенную функцию JSON_OBJECT . Эта функция принимает список пар ключ-значение вида JSON_OBJECT(key1, value1, key2, value2, … key(n), value(n)) и возвращает JSON объект.

Стоит обратить внимание на функцию JSON_ARRAY , которая возвращает массив JSON объектов.

Если вы укажете один ключ несколько раз – только первая пара ключ-значение будет использована. Также ключи объектов сортируются и очищаются от пробелов в начале.

Еще одна функция для работы с JSON – JSON_MERGE . Функция принимает несколько JSON объектов и возвращает один объединенный.

В JSON_MERGE мы передаем только объекты. Некоторые из них были созданы с использованием JSON_OBJECT , которую вы разбирали ранее. Если в JSON_MERGE ключ повторяется несколько раз, то его значения будут объединены в массив.

Мы можем проверить результат с использование функции JSON_TYPE , которая возвращает тип хранимого значения.

Чтение

Итак, мы имеем несколько продуктов в нашей базе.

Для обычных MySQL запросов условие WHERE выглядит довольно просто – нужно указать поле, оператор и значение. Для JSON полей это не будет работать.

Читайте также:  Acer aspire one зарядка

Для выбора нужных строк по JSON полю нужно быть знакомым с понятием пути. Самые простые примеры пути – css селекторы. Вторая часть пазла – функция JSON_EXTRACT , которая принимает в качестве аргумента путь для перемещения по JSON объекту.

К примеру мы интересуемся в телевизорах с USD или HDMI портом.

Обновление

Для обновления JSON значений нужно использовать JSON_INSERT , JSON_REPLACE и JSON_SET функции. Эти функции также требуют путь чтобы обозначить какие част JSON объекта нужно изменить. Вывод этих функций – валидный JSON объект с примененными изменениями.

Давайте изменим все мобильные телефоны и добавим свойство чипсета.

Путь $.chipset определяет расположение свойства chipset в корне объекта.

Давайте обновим свойство chipset с помощью JSON_REPLACE .

Напоследок у нас осталась функция JSON_SET и мы используем ее для обновления телевизоров.

Эти функции кажутся идентичными, но есть разница в их поведении. JSON_INSERT добавляет свойство к объекту только если оно еще не существует. JSON_REPLACE заменяет свойство только если оно существует. JSON_SET добавляет свойство или заменяет его если оно уже существует.

Удаление

Здесь мы рассмотрим два случая удаления данных.

Первый – удаление конкретного ключа-значения из ваших JSON полей, второй – удаление строк целиком с условием по JSON полям.

К примеру мы больше не предоставляем mount_type информации для камер и хотим удалить ее для всех камер. Мы сделаем это с использованием JSON_REMOVE , которая возвращает обновленный JSON без указанного в пути ключа.

Для второго случая, мы удалим все телефоны с версией Android OS Jellybean.

У меня есть JSON, который я хотел бы вставить в базу данных mysql. Мой JSON

У меня есть таблица в mysql, называемая «USERSAMOUNTS» с двумя coloumns.

Столбцы называются «USERNAME» и «AMOUNT».

Я пытаюсь вставить каждое имя в столбец USERNAME и каждую сумму в столбец AMOUNT в одном запросе с использованием цикла foreach и implode. Код, который я использую, выглядит следующим образом ….

Читайте также:  Html ul li убрать маркер

…. моя проблема в том, что когда я запускаю код, все, что я получаю, это сообщение Connected to database для подтверждения Connected to database данных. Никакие записи не вставлены и сообщения об ошибках не отображаются. Может ли кто-нибудь здесь указать, где я ошибаюсь и, возможно, дать мне подсказку о том, как исправить код?

Измените свой код:

У вас есть проблема в начале вашего кода:

$array – это многомерный массив, состоящий только из одного элемента с ключом для users , поэтому вы не зацикливаете свои данные, а поверх внешнего массива. Если вы включите отображение ошибок, вы увидите предупреждение: PHP Notice: Array to string conversion в строке:

Вам нужно зациклиться на содержимом вашего users :

Вам не нужны скобки вставки

Первоначальная проблема заключается в том, что ваш массив не $ array, а $ array ["users"].

I’m using this code below to convert database to JSON.

In my PHP file no error, no database, nothing display.

3 Answers 3

Deprecated : mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in

As the warning suggest use either pdo or mysqli.

mysqli :

PDO :

You can simply use the json_encode method on an array storing the data of your mysql database ex:

Not the answer you’re looking for? Browse other questions tagged php mysql json or ask your own question.

Linked

Related

Hot Network Questions

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa 4.0 with attribution required. rev 2020.1.17.35803

Комментировать
481 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock
detector