【发布时间】:2015-05-12 17:03:59
【问题描述】:
如果我在发票表单中对产品进行了一些更改,例如编辑一个、删除其他产品或通过一个查询添加新产品,我需要知道如何在多行中创建 INSERT、UPDATE 或 DELETE ...我尝试了更新,但是如果我删除一两个产品,或者如果我添加一两个并保存表单,则在 DB 中不会进行更改,只有以前在 DB 中的数据已更新。
这是我的代码:
if (!empty($_POST)) {
$conn->beginTransaction();
$stmt = $conn->prepare("UPDATE PRODUCTOS SET `cod` = :cod, `nombreProd` = :nombreProd, `proveedor` = :proveedor, `existencia` = :existencia, `ref_compra` = :ref_compra
WHERE `id_p` = :id_p");
$stmt->bindParam(":cod", $cod, PDO::PARAM_STR);
$stmt->bindParam(":nombreProd", $nombreProd, PDO::PARAM_STR);
$stmt->bindParam(":proveedor", $proveedor, PDO::PARAM_STR);
$stmt->bindParam(":existencia", $existencia, PDO::PARAM_STR);
$stmt->bindParam(":ref_compra", $ref_compra, PDO::PARAM_STR);
$stmt->bindParam(":id_p", $id_p, PDO::PARAM_INT);
foreach ($_POST['id_p'] as $i => $id_p) {
$cod = $_POST['cod'][$i];
$nombreProd = $_POST['nombreProd'][$i];
$proveedor = $_POST['proveedor'][$i];
$existencia = $_POST['existencia'][$i];
$ref_compra = $_POST['ref_compra'];
$id_p = $_POST['id_p'][$i];
$stmt->execute();
}
$conn->commit();
}
编辑
这是我的多个插入代码:
$conn->beginTransaction();
$sql = "INSERT INTO PRODUCTOS
(cod, nombreProd, proveedor, existencia, compra, tCompra, f_vencimiento, id_user, nombre, ref_compra, f_compra)
VALUES ";
$insertQuery = array();
$insertData = array();
foreach ($_POST['cod'] as $i => $cod) {
$insertQuery[] = '(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
$insertData[] = $_POST['cod'][$i];
$insertData[] = $_POST['nombreProd'][$i];
$insertData[] = $_POST['proveedor'][$i];
$insertData[] = $_POST['existencia'][$i];
$insertData[] = $_POST['compra1'][$i];
$insertData[] = $_POST['total1'][$i];
$insertData[] = $_POST['f_vencimiento'][$i];
$insertData[] = $_POST['id_user'];
$insertData[] = $_POST['nombre'];
$insertData[] = $_POST['ref_compra'];
$insertData[] = $_POST['fecha'];
}
if (!empty($insertQuery)) {
$sql .= implode(', ', $insertQuery);
$stmt = $conn->prepare($sql);
$stmt->execute($insertData);
}
$conn->commit();
【问题讨论】:
-
您的 PHP 中没有
INSERT或DELETE代码,您为什么会期望这种情况发生? -
您可以使用
REPLACE将INSERT和UPDATE组合在一个查询中。但是你需要单独做DELETE。 -
@Barmar 有了多行,我不知道在哪里或如何进行查询......这个多重插入对我来说是全新的......对不起
-
只有在
REPLACE语句中指定id = NULL时才会分配新ID。 -
您应该在表单中添加一个
Delete复选框。将 ID 放入复选框的值中。然后你可以遍历$_POST['delete']并删除所有这些行。
标签: mysql arrays for-loop foreach multiple-insert