Массив в MySQL PHP

У меня есть строка JSON, содержащая два объекта, имена людей и связанные с ними номера телефонов, которая выглядит следующим образом (имя и телефон ВСЕГДА будут одинаковой длины):

{"Name":["Name One","Name Two","Name Three"],"Phone":["123465789","3216546564","15641654654"]}

Я пытаюсь вставить это в базу данных MySQL через PHP, но немного борюсь, как вставить оба значения в один цикл.

Код PHP пока выглядит следующим образом:

<?php

$dbuser = "";
$dbpassword = "";
$database = "";

$result;
$resultSuccess;

$user = $_POST['user'];
$proc_name = $_POST['proc_name'];
$person_name_contacts = $_POST['person_name_contacts'];

$mysqli = new mysqli("localhost", $dbuser, $dbpassword, $database);
if ($mysqli->connect_errno) {
$result = 'Database Connection Failed';
}else{

$user = mysqli_real_escape_string($mysqli,$user);
$proc_name = mysqli_real_escape_string($mysqli,$proc_name);
$person_name_contacts = 
mysqli_real_escape_string($mysqli,$person_name_contacts);

$person_name_contacts=json_decode($person_name_contacts);

foreach($person_name_contacts as $value) {
    $sql = "INSERT INTO evac_people (user, evac_procedure, person_name,  
person_contact)
        VALUES     ('".$user."','".$proc_name."','".$person_names."','".$person_contacts."')";
    $result = $mysqli->query($sql);

    if ($mysqli->error === ""){
        echo "true";
    }else{
        echo $mysqli->error;
    }
}

}
?>

Я стараюсь избегать выполнения sql-запросов внутри циклов. Постройте все ЗНАЧЕНИЯ внутри цикла, а затем один раз выполните запрос. И посмотрите насчет инъекции sql !!

Strawberry 30.11.2018 10:55

Ваш код широко открыт для атак с использованием sql-инъекций. Очевидно, вы полностью доверяете источнику данных, который используете ...

arkascha 30.11.2018 10:55

Ваш вопрос непонятен. Что именно вы просите от нас?

arkascha 30.11.2018 10:56

Как я могу поместить 123465789 и Name One в SQL в одну и ту же позицию?

YeahThaBoyz 30.11.2018 10:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
4
48
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

если я этого не понял, должно быть:

 foreach ($person_name_contacts['Name'] as $k =>$value) {
    $person_name = $value;
    $person_contact = $person_name_contacts['Phone'][$k];

    $sql = "INSERT INTO evac_people (user, evac_procedure, person_name,  person_contact)
            VALUES     ('" . $user . "','" . $proc_name . "','" . $person_name . "','" . $person_contact . "')";
    $result = $mysqli->query($sql);

    if ($mysqli->error === "") {
        echo "true";
    } else {
        echo $mysqli->error;
    }
}

Обновлено:

Лучшее решение в соответствии с @Клубника:

$sql = "INSERT INTO evac_people (user, evac_procedure, person_name,  person_contact) VALUES ";
$sqlValue = array();
foreach ($person_name_contacts['Name'] as $k =>$value) {
    $person_names = $value;
    $person_contacts = $person_name_contacts['Phone'][$k];
    $sqlValue[] = "('" . $user . "','" . $proc_name . "','" . $person_names . "','" . $person_contacts . "')";
}
if (!empty($sqlValue)) {
    $sql = $sql . implode(',', $sqlValue);
    $result = $mysqli->query($sql);
    if ($mysqli->error === "") {
        echo "true";
    } else {
        echo $mysqli->error;
    }
}

Попробуйте это решение. Сообщите мне, если это сработает.

    $json = '{"Name":["Name One","Name Two","Name Three"],"Phone":["123465789","3216546564","15641654654"]}';

    $result = json_decode ($json);

    $array = array();

    foreach ($result->Name as $k =>$value)
    {
        $name = $value;
        $contact = $result->Phone[$k];

    $sql = "INSERT INTO evac_people (user, evac_procedure, person_name,  person_contact)
             VALUES     ('".$user."','".$proc_name."','".$name."','". $contact . "')";
    $result = $mysqli->query($sql);

    if ($mysqli->error === "") {
        echo "true";
    } else {
        echo $mysqli->error;
    }

    }

Другие вопросы по теме