У меня есть строка 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-инъекций. Очевидно, вы полностью доверяете источнику данных, который используете ...
Ваш вопрос непонятен. Что именно вы просите от нас?
Как я могу поместить 123465789 и Name One в SQL в одну и ту же позицию?






если я этого не понял, должно быть:
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;
}
}
Я стараюсь избегать выполнения sql-запросов внутри циклов. Постройте все ЗНАЧЕНИЯ внутри цикла, а затем один раз выполните запрос. И посмотрите насчет инъекции sql !!