Как получить значения из магазинов и вставить в таблицу товаров?

Я новичок в высказываниях, поэтому, пожалуйста, не торопитесь. Я проверил вопросы, заданные другими, но не нашел решения моей проблемы.

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

Я пробовал несколько методов, но они не работали. Вот мои попытки:

Связь

$mysqli = new mysqli(host, dbase, username, password);

Первый метод подготовки операторов: Я пробовал этот метод и без bind_result.

if ($stmt = $mysqli->prepare("INSERT INTO products (user_id, cat_id, store_id, item_name, item_code, item_description, item_qtty, item_price, item_seo_url, item_image, item_date) SELECT store_id FROM stores WHERE user_id = ?")) {
    $stmt->bind_param("i", $user_id);
    $user_id = filterString($_SESSION['id']);
    $stmt->execute();
        $stmt->bind_result($store_id);
        if ($stmt->fetch()){
        echo " Records created successfully. Redirect to landing page";
        header("location: index.php");
        exit();
    } else{
        echo "Something went wrong. Please try again later.";
       }
}
$stmt->close();  

Операторы подготовки sql второго метода: Я тоже пробовал это, но не сработало:

    $sql = "INSERT INTO products (user_id, cat_id, store_id, item_name, item_code, item_description, item_qtty, item_price, item_seo_url, item_image, item_date) SELECT ?, store_id FROM stores WHERE user_id = ?";
    if ($stmt = $mysqli->prepare($sql)){
    $stmt->bind_param("iiisiisiisss", $user_id, $cat_id, $store_id, $item_name, $item_code, $item_description, $item_qtty, $item_price, $item_seo_url, $item_image, $item_date);
    $user_id = $_SESSION['id'];
    $cat_id = $cat_id;
    $store_id = $store_id;
    $item_name = $item_name;
    $item_code = $item_code;
    $item_description = $item_description;
    $item_qtty = $item_qtty;
    $item_price = $item_price;
    $store_seo_url = seo_url($item_name);
    $item_image = $vtyol;
    $item_date = $date;
    if ($stmt->execute()){
        echo " Records created successfully. Redirect to landing page";
        header("location: index.php");
        exit();
    } else{
        echo "Something went wrong. Please try again later.";
    }
}
$stmt->close();

Не было возможности получить store_id из магазинов, я повторяю идентификатор магазина на странице, чтобы увидеть, получил ли я его, он пуст. как я могу заставить его работать? Нужно ли мне объявлять все значения в bind_param в первом методе? (Я пробовал и не работал). если да, то как добавить пункт $stmt->bind_param("i", $user_id);.

Я действительно не знаю, что еще попробовать, мне нужен ваш совет и помощь. Gtg в больницу сейчас вернусь через 1 час, отвечу на ваши вопросы и ответы.

Спасибо вам всем

В последнем примере, который я пробовал с кодом от @Michael Eugene Yuen, он продолжает говорить, что что-то пошло не так, из-за невозможности получить $ store_id из таблицы магазинов. Мои коды были слишком длинными, поэтому я сократил их и попытался получить тот же результат.

Вот последний пример, который не работает:

$sql = "INSERT INTO products (
user_id, store_id, name, salary
)  
 SELECT ?, ?, ?, ?,
`store_id` FROM stores WHERE user_id = ?";
$stmt = $mysqli->prepare($sql);
    $stmt->bind_param("iisii", $user_id, $store_id, $name, $salary, $user_id);
    $user_id = $user_id;
    $store_id = $store_id;
    $name = $name;
    $salary = $salary;
    if ($stmt->execute()){
        header("location: index.php");
        exit();
    } else{
        echo "Something went wrong. Please try again later.";
    }
$stmt->close();

Строка базы данных для обеих таблиц:

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(100) NOT NULL,
  `store_id` varchar(100) NOT NULL,
  `name` varchar(255) NOT NULL,
  `salary` int(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE IF NOT EXISTS `stores` (
  `store_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(100) NOT NULL,
  `name` varchar(255) NOT NULL,
  `salary` int(10) NOT NULL,
  PRIMARY KEY (`store_id`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

INSERT INTO `stores` (`store_id`, `user_id`, `name`, `salary`) VALUES
(1, '12', 'aaaaaaaaaaad', 12),
(2, '12', 'sada', 1234656);

может у вас ошибка?

Diego Avila 02.05.2018 17:05

Все типы ошибок включены в моем файле php.ini. Ошибка в форме не отображается, первый метод дает логическую ошибку, значение равно emtpy, второй метод без ошибок, но идентификатор хранилища возвращается пустым.

Tedi 02.05.2018 17:22

как получить это: $ user_id для первого и второго метода, пожалуйста

Diego Avila 02.05.2018 17:33

Имя столбца user_id ($ user_id) в обеих таблицах для информации. В этом проблема, я не получаю $ user_id. он пуст, когда я повторяю его или пытаюсь вставить в базу данных. @ Tegito123

Tedi 02.05.2018 18:01

пожалуйста, поместите свой код, как получить $ user_id

Diego Avila 02.05.2018 18:03

к сожалению, вы спрашивали Store_id, нет необходимости получать user_id, я использую $ _SESSION [id]; вставить. Я в больнице сейчас буду дома через 30 минут. Коды под вопросом, все у меня есть. @ Tegito123

Tedi 02.05.2018 18:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
0
6
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы пытались вставить данные в 11 столбцов, но в ваши утверждения было передано только 1 значение.

Ваше утверждение должно выглядеть так:

$sql = "INSERT INTO products (
            user_id, cat_id, item_name, item_code, item_description,
            item_qtty, item_price, item_seo_url, item_image, item_date,
            store_id
                )
        SELECT ?, ?, ?, ?, ?,
               ?, ?, ?, ?, ?,
               `store_id` FROM stores WHERE user_id = ?";

$stmt = $mysqli->prepare($sql);

Дважды привяжите свой $ user_id. Первый предназначен для вашего первого заполнителя, а последний - для вашего оператора подвыбора (bind_param)

$stmt->bind_param("iisisiisssi", $user_id, $cat_id, $item_name, $item_code, $item_description, $item_qtty, $item_price, $item_seo_url, $item_image, $item_date, $user_id);

$user_id = $_SESSION['id'];
$cat_id = $cat_id;
$item_name = $item_name;
$item_code = $item_code;
$item_description = $item_description;
$item_qtty = $item_qtty;
$item_price = $item_price;
$store_seo_url = seo_url($item_name);
$item_image = $vtyol;
$item_date = $date;

if ($stmt->execute()){
        echo " Records created successfully. Redirect to landing page";
        $stmt->close();         
        header("location: index.php");
        exit();
} else{
        echo "Something went wrong. Please try again later.";
}

И на основе недавно добавленного примера 2, количество столбцов, заполнители снова не соответствуют количеству bind_param. Кроме того, когда вы смотрите на свою таблицу магазинов, у вас есть две записи под одним и тем же user_id. Итак, какой store_id вы собираетесь вставить в таблицу магазина?

На данный момент я использовал LIMIT 1, но, конечно, это неправильный подход.

$sql = "INSERT INTO products (
            user_id, name, salary, store_id
        )  
        SELECT ?, ?, ?, `store_id` FROM stores WHERE user_id = ? LIMIT 1";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("isii", $user_id, $name, $salary, $user_id);
$user_id = 12;
$name = 'john';
$salary = 1200;
if ($stmt->execute()){
    header("location: index.php");
    exit();
} else {
    echo "Something went wrong. Please try again later.";
}
$stmt->close();

Это оператор sql с жестко заданными значениями:

$sql = "INSERT INTO products (
            user_id, name, salary, store_id
        )
        SELECT 12, 'john', 1200,
        `store_id` FROM stores WHERE user_id = 12 LIMIT 1";

То же утверждение с переменными:

$sql = "INSERT INTO products (
           user_id, name, salary, store_id
        )
        SELECT $user_id, $name, $salary,
        `store_id` FROM stores WHERE user_id = $user_id LIMIT 1";

То же самое с заполнителями:

$sql = "INSERT INTO products (
        user_id, name, salary, store_id
        )  
        SELECT ?, ?, ?,
        `store_id` FROM stores WHERE user_id = ? LIMIT 1";

$stmt->bind_param("isii", $user_id, $name, $salary, $user_id);
$user_id = 12;
$name = 'john';
$salary = 1200;

Я не думал, что мне нужно будет добавлять значения, я смотрел некоторые примеры similer на YouTube, они не использовали values(?,?), затем я удалил их, я использовал вот так `(values ​​(?,?) SELECT` неправильно :) Я попробую ваше обновление через несколько минут, большое спасибо. @ Майкл Юджин Юн

Tedi 02.05.2018 19:30

продолжаю говорить, что что-то пошло не так, потому что не могу получить store_id из таблицы магазинов, я сократил код и таблицы базы данных, добавив их в вопрос. @ Майкл Юджин Юн

Tedi 02.05.2018 22:31

Спасибо за предоставленную возможность @Michael Eugene Yuen, все примеры в вашем обновленном ответе работают как шарм. моя вина! Я добавлял больше заполнителя для привязки переменной. Не могу поблагодарить вас.

Tedi 03.05.2018 10:38

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