PHP сохранить массив из элементов словаря в таблицу MySQL

Я пытаюсь сохранить массив в PHP в таблицу в базе данных MySQL.
Мой PHP получает массив в формате JSON. Массив состоит из списка словарей:

{
{“first_name” : “Sam”, “last_name”: “Smith”, “email”: [email protected]},
{“first_name” : “Mike”, “last_name”: “Detman”, “email”: [email protected]},
{“first_name” : “Linda”, “last_name”: “Bennett”, “email”: [email protected]}}

Вопрос в том, как проще всего сохранить это в таблице базы данных с соответствующими столбцами для ключей «имя_первого», «имя_папки» и «электронная почта»?

Многие ответы в Интернете предлагают использовать функцию php serialize (). Но этот метод, кажется, работает для сохранения только одного столбца в таблице, поэтому может не работать для сохранения записей в несколько столбцов. (Я могу быть не прав…..)

Другие предлагают использовать запрос «INSERT INTO table (…) VALUES (….)». Но этот метод, кажется, работает для добавления одной записи.
Кто-нибудь может предложить способ реализации задачи? Спасибо!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Спасибо за ваш вклад до сих пор … Вот мой Php-код, пытающийся использовать цикл (я так туп на PHP, поэтому, пожалуйста, не смейтесь, если вы видите что-то глупое ….)

$receivedData= json_decode($json_data);

$dbc=mysql_connect("mysql", "Username", "Passcode");
mysql_select_db("ObtainedData");

while ($lineData = mysql_fetch_array($receivedData))
{
$firstName = $lineData['first_name'];
$lastName = $lineData['last_name'];
$email= $lineData['email'];
mysql_query("INSERT INTO aData (first_name, last_name, email) VALUES ($lastName, $firstName, $email)");
}

Это правильный способ сделать? Я использую правильный путь петли или нужен другой путь? Также мне нужно сериализовать () данные перед выполнением цикла?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~

Хорошо, вот моя последняя версия, пока еще нет данных в базу данных. Однако, исходя из времени, которое требуется для получения ответа, кажется, что цикл был выполнен. И ответ был правильным с полными данными … Не зная, есть ли какие-либо проблемы с настройкой базы данных или таблицей?

<?php

$json_data=file_get_contents('php://input', true);
$post_data = json_decode($json_data);
$dbc=mysql_connect("mysql", "username", "passcode");
mysql_select_db("ObtainedData");

foreach($post_data as $lineData)
{$first_name=$lineData->first_name;
$last_name=$lineData->last_name;
$email=$lineData->email;
mysql_query("INSERT INTO 'aData' ('first_name', 'last_name', 'email') VALUES ('$first_name', '$last_name', '$email')");}

if (is_array($post_data))
$response = array("status" => "ok", "code" => 0, "original request" => $post_data);
else
$response = array("status" => "error", "code" => -1, "original_request" => $post_data);
$processed = json_encode($response);
echo $processed;

mysql_close($dbc);

?>

1

Решение

Другие предлагают использовать запрос «INSERT INTO table (…) VALUES (….)». Но этот метод, кажется, работает для добавления одной записи.

Нет, это может работать для нескольких записей:

insert into `table`
(`first_name`,`last_name`,`email`)
values
('row 1 first name', 'row 1 last name', 'row 1 email'),
('row 2 first name', 'row 2 last name', 'row 2 email') ...

Чтобы построить запрос, вам нужно использовать json_decode в строке json и в цикле по строке результатов для построения кортежа вы можете использовать array_map вернуть кортеж для каждой записи + implode объединить все кортежи (если вам не нравятся циклы)

редактировать

(1)
json_decode здесь приведем массив объектов, а не массив ассоциативных массивов, потому что просто объекты json конвертируются в PHP stdClass объекты (вы не можете сказать $lineData['first_name'], только $lineData->first_name разрешено), если вы действительно хотите получить доступ к свойству объекта таким же образом, как вы делаете с массивами, такими как $lineData['first_name'], затем вы должны преобразовать результат в ассоциативный массив, используя json_decode($json_data, true)

(2)
Ваш цикл O.K, но требует небольшой модификации:

  1. $receivedData это уже массив с n элементами, правильный способ перебрать массив в PHP так:
    foreach($receivedData as $lineData)
    линия, которую вы используете: while ($lineData = mysql_fetch_array($receivedData)) используется для обхода ресурс (тот, который вы получаете, когда вы используете mysql_query с утверждением выбора)
  2. Всегда заключайте имена таблиц и столбцы в кавычки INSERT INTO `aData` (`first_name`, `last_name`... чтобы не возникало конфликтов, если имя является зарезервированным ключевым словом
  3. Строки MySQL должны быть заключены в одинарные или двойные кавычки, поэтому правильный запрос должен выглядеть следующим образом:
    mysql_query("INSERT INTO `aData` (`first_name`, `last_name`, `email`) VALUES ('$lastName', '$firstName', '$email'))"
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]