Я пытаюсь вставить несколько значений в строку таблицы, которые поступают из массива. Я почти решил проблему с этим ответом. Лучший способ ВСТАВИТЬ много значений в mysqli?
пожалуйста, проверьте принятый ответ. в этом ответе он добавляет значение в один столбец, но я хочу, чтобы оно было в нескольких столбцах. как я могу это сделать?
$array = array($u_id, $pid, $tradexx_price, $pvp, $product_title, $product_image);
$query = "INSERT INTO selection (c_id,p_id,tradexx_price,pvp,product_name,img) VALUES (?,?,?,?,?,?)";
$stmt = $con->prepare($query);
$stmt->bind_param("ssssss", $one);
$con->query("START TRANSACTION");
foreach ($array as $one) {
$stmt->execute();
}
$stmt->close();
$con->query("COMMIT");
но этот код дает мне ошибку.
Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables in
Любые ответы приветствуются.
полный код скрипта
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
include '../includes/conn.php';
if (isset($_POST['insert_selection'])) {
$pid = implode(',', $_POST['id']);
$u_id = $_POST['u_id'];
foreach ((array)$pid as $p) {
$get_pro = "SELECT * FROM products WHERE id IN ($p)";
$run_pro = mysqli_query($con, $get_pro);
while ($row_pro = mysqli_fetch_array($run_pro)) {
$id = $row_pro['id'];
$product_title = $row_pro['product_title'];
$tradexx_price = $row_pro['product_price'];
$pvp = $row_pro['pvp'];
$product_image = $row_pro['product_image'];
$array = array($u_id, $id, $tradexx_price, $pvp, $product_title, $product_image);
$query = "INSERT INTO selection (c_id,p_id,tradexx_price,pvp,product_name,img) VALUES (?,?,?,?,?,?)";
$stmt = $con->prepare($query);
$stmt->bind_param("ssssss", $cur_c_id, $cur_id, $cur_tradexx_price, $cur_pvp, $cur_product_name, $cur_img);
$con->query("START TRANSACTION");
foreach ($u_id as $i => $cur_c_id) {
$cur_id = $id[$i];
$cur_tradexx_price = $tradexx_price[$i];
$cur_pvp = $pvp[$i];
$cur_product_name = $product_title[$i];
$cur_img = $product_image[$i];
$stmt->execute();
}
$stmt->close();
$con->query("COMMIT");
}
}
}
$pid
значение из флажка
@ PM77-1 они одинаковы по подсчету.
Вам нужно 8 переменных в вызове bind_param()
.
Вам не нужна петля. Вы можете использовать запрос SELECT
в качестве источника данных для INSERT
.
error_reporting(E_ALL);
ini_set('display_errors', 1);
include '../includes/conn.php';
if (isset($_POST['insert_selection'])) {
$pid = implode(',', $_POST['id']);
$u_id = $_POST['u_id'];
$sql = "INSERT INTO selection (c_id,p_id,tradexx_price,pvp,product_name,img)
SELECT ?, id, product_price, pvp, product_title, product_image
FROM products
WHERE FIND_IN_SET(id, ?)";
$stmt = $con->prepare($sql);
$stmt->bind_param("i", $u_id, $pid);
$stmt->execute(); }
}
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат.
Подсчитайте свои поля против ваших значений.