Вставить массив в одиночный MySQL raw с помощью foreach

#php #mysql

#php #mysql

Вопрос:

Мне нужно вставить данные MySQL из значений массива в один raw. Я пробовал приведенный ниже код, но получаю сообщение об ошибке: Предупреждение: implode(): недопустимые аргументы, переданные в Как я могу решить эту проблему? Или есть какой-либо альтернативный способ вставки значений массива в один raw в MySQL с использованием PHP?

 <?php

foreach ($_POST['qty'] as $product_id => $qty) {
$product_id = implode(" ",$product_id);
$qty = implode(" ",$qty);
}
$q = mysqli_query($conn, "INSERT INTO product_order (product_id,qty) VALUES ('$product_id','$qty')");

?>
  

введите описание изображения здесь

Комментарии:

1. Вы пытаетесь сохранить значения, разделенные запятыми, в БД?

2. ДА. Правильно…..

3. пожалуйста, не делайте этого. Это плохая идея. Здесь вы найдете тысячи вопросов от людей, которые сделали это и боролись с этим после.

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

Ответ №1:

Вторые параметры функции Implode принимают массив, поэтому при первой проверке в функции implode вторым параметром является array.

 foreach ($_POST['qty'] as $product_id => $qty)
  

В этой строке указано $product_id , что это ключ, который не является массивом, поэтому функция implode не должна работать.

Пожалуйста, предоставьте $_POST['qty'] дамп

Ответ №2:

Попробуйте это:

 <?php
 $product = [];
 $qtys = [];
if(!empty($_POST['qty'])){
foreach ($_POST['qty'] as $product_id => $qty) {
   array_push($product, $product_id);
   array_push($qtys, $qty);
}
 $qty_final = implode(',',$qtys);
 $product_id_final = implode(',',$product);
 $q = mysqli_query($conn, "INSERT INTO product_order (product_id,qty) VALUES ('$product_id_final','$qty_final')");
}
  

Очень плохая идея сохранять значения, разделенные запятыми, в БД.

Комментарии:

1. я не хочу сохранять с запятой, но я не понимаю, как управлять порядком, поэтому так поступаю. могу ли я использовать ваш skype? я могу поделиться с вами своим изображением таблиц sql там

2. @KevinHeimlich Вы пробовали мой метод, описанный выше. Сработало ли это для вас? Для без запятой вам нужно создать другую таблицу и сохранить идентификаторы соответствующим образом.

3. да. могу ли я получить ваш skype id? я хочу кое-что показать… пожалуйста, помогите

4. @KevinHeimlich Что бы вы ни хотели показать, вы можете прикрепить это к вопросу.

5. прикрепил снимок экрана моей таблицы. проверьте там продукт, у меня есть один raw. как я могу сохранить там несколько идентификаторов продуктов?

Ответ №3:

Это не очень хорошая идея.— Это очень плохая идея.

Это, как говорится. Ваш $product_id не массив — это ключ массива ( string или integer ), поэтому нечего взрывать.

Вместо вставки csv в эту таблицу было бы гораздо лучше вставить новую строку для каждого имеющегося у вас идентификатора.

Ответ №4:

попробуйте это :

 <?php

$product_data = isset(($_POST['qty'])? ($_POST['qty']: array();

if ( !empty($product_data) ){

    $sql = "INSERT INTO product_order (product_id, qty) VALUES ('".implode(", ", array_keys($product_data))."','".implode(", ", array_values($product_data))."')";

    $q = mysqli_query($conn, $sql);

}
?>
  

Ответ №5:

Если вы хотите опубликовать массив в базе данных, используйте функцию php serialize.Лучше всего подходит для данных типа массива

     $serialized_data = serialize(array('Math', 'Language', 'Science'));  
echo  $serialized_data . '<br>';
  

Ответ №6:

Вы могли бы сделать,

 <?php
$product_data = isset(($_POST['qty'])? ($_POST['qty']: array();
if ( !empty($product_data) ){
    $sql = "INSERT INTO product_order (product_id, qty) VALUES ('".implode(", ", array_keys($product_data))."','".implode(", ", array_values($product_data))."')";
    $q = mysqli_query($conn, $sql);
}
?>
  

Это должно сработать.

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