首页 > 解决方案 > 在 MYSQL 的一个查询中更新多行的问题

问题描述

当我在脚本中继续更新多行时出现错误,这个问题并不总是发生,但是当发生更新成功但在另一个表中没有任何引用或基数时,会更改两个或多个项目中的存在。

这是我要更新的代码:

$ref_venta = filter_input(INPUT_POST, 'refIdFactura', FILTER_SANITIZE_STRING);
$stmt = $conn->prepare("UPDATE `PRODUCTOS` SET `refIdFactura` = :refIdFactura WHERE `id_p` = :id_p");
foreach($_POST['facturar'] as $i => $id_p) {
    $stmt->bindParam(':refIdFactura', $ref_venta);  // is a number of receipt
    $stmt->bindParam(':id_p', $_POST['facturar'][$i]); //is the id of each item in the list
    $stmt->execute();
}

就像我说的这里工作正常,但是当问题发生时,这个 UPDATE 这个另一个表也没有在脚本中列出:

TABLE NAME:  `LPRODUCTOS` ---- ROWS: idP, existences

有两个主键不同的表,如果您在 UPDATE 中看到,我从不捕获存在的行,并且id_pTABLE的 id( ) 与 TABLEPRODUCTOS的 id( ) 不同idPLPRODUCTOS

所以我不知道为什么会发生这种情况......

标签: mysqlpdoinsert-update

解决方案


看起来foreign key constraints两张桌子之间有。如果您要更新第一个表,这可能会导致第二个表的更新。

检查:

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME IN ('LPRODUCTOS', 'PRODUCTOS');

这应该显示您的索引,包括。约束。

了解更多外键约束


推荐阅读