@havertz

Как записать запрос на добавление массива из input в базу данных?

Данные не доходят до БД. Не могу понять почему. У меня есть вот такой код:
<?php

require_once '../vendor/connect.php';

$name = $_POST['name'];
$price = $_POST['price'];
$quantity = $_POST['quantity'];

$orders = array_map(
    fn($name, $price, $quantity) => ['name' => $name, 'price' => $price, 'quantity' => $quantity],
    $name,
    $price,
    $quantity
);
var_dump($orders); 


$sql = 'insert into `zakaz` (`name`, `price`, `quantity`) values ' ($order['name'], $order['price'], $order['quantity']);

$sqlValues = [];
foreach ($orders as $order) {
    $sqlValues[] = '('
        . implode(', ', array_map(fn($val) => "'" . mysqli_real_escape_string($connect, $val) . "'", $order))
        . ')';
    
}
$sql .= implode(', ', $sqlValues);
var_dump($sql); 
 
?>


CREATE TABLE `zakaz` (
  `name` text COLLATE utf8_unicode_ci,
  `price` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `quantity` int(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
COMMIT;


<?php


     $connect = mysqli_connect('localhost', 'a0634339_base', 'root', 'a0634339_base');

    if (!$connect) {
        die('Error connect to DataBase');
    }

    ?>


Через var_dump выводит следующее:

array(2) { [0]=> array(3) { ["name"]=> string(18) "apple" ["price"]=> string(3) "70" ["quantity"]=> string(1) "2" }
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
Добрый день, в первую очередь хочется сказать, что в базу данных на подобии MySQL записать массивы нельзя, только строки или json.

Если говорить, о том, что вы хотите вообще данные занести, а потом их вывести, как массив, то такое сделать можно.
Что хочется сказать, вам стоит понять, как надо работать с базой данных, советую использовать PDO и подготовленные запросы.

Сам пример кода

В вашем файле подключения рекомендую сделать так:
try {

   $connect = new PDO('mysql:host=localhost;dbname=a0634339_base;charset=utf8', 'root', 'a0634339_base');

} catch (\Exception $error) {

   echo "Error connect to DataBase:" . $error->getMessage();
   die();

}


В основном файле выглядеть должно примерно так:

require_once '../vendor/connect.php';

$name = $_POST['name'];
$price = $_POST['price'];
$quantity = $_POST['quantity'];


$sql = "INSERT INTO `zakaz` (`name`,`price`, `quantity`) VALUES (:name, :price, :quantity)"; // тут вы допустили ошибку, писали слово INSERT нижним регистром, одна из причин почему у вас запрос не работал.

$params = [
  "name" => $name,

  "price" => $price,

  "quantity" => $quantity
];

$connect->prepare($sql)->execute($params);

// дальше идем, что бы взять информацию из бд и вывести ее как массив.

$sth = $connect->prepare("SELECT * FROM `zakaz` WHERE `name` = :name");

$params = [
  "name" => $name
];

$sth->execute($params);

$array = $sth->fetchAll(PDO::FETCH_ASSOC);

var_dump($array[0]); // полагаю вы хотели получить это
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
24 апр. 2024, в 14:02
5000 руб./за проект
24 апр. 2024, в 13:45
15000 руб./за проект
24 апр. 2024, в 13:32
300 руб./за проект