#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);
}
?>
Это должно сработать.
Но хранить список, разделенный запятыми, в поле не очень хорошо. У вас может быть новая таблица, чтобы вы могли сохранять сопоставление с тем, какие продукты находятся в каком порядке.