@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" }
  • Вопрос задан
  • 76 просмотров
Решения вопроса 1
grisha_sychev
@grisha_sychev
Developer PHP, Symfony
Добрый день, в первую очередь хочется сказать, что в базу данных на подобии MySQL записать массивы нельзя, только строки.

Если говорить, о том, что вы хотите вообще данные занести, а потом их вывести, как массив, то такое сделать можно.
Что хочется сказать, вам стоит понять, как надо работать с базой данных, советую использовать 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]); // полагаю вы хотели получить это
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы