【问题标题】:Issue with UPDATE multiple rows in one query in MYSQL在 MYSQL 的一个查询中更新多行的问题
【发布时间】:2020-10-14 01:09:12
【问题描述】:

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

这是我要更新的代码:

$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 中看到,我从不捕获存在的行,并且 TABLE PRODUCTOS 的 id(id_p) 与 id (idP) 不同) 的表LPRODUCTOS

所以我不知道为什么会这样......

【问题讨论】:

  • 检查表是否有触发器
  • @nbk 表中没有触发器
  • 只有在 $_POST['facturar'] 中有两个 id 时才会出现问题,所以请回显并查看内容是什么
  • @nbk,是的,在facturar 中,每次都有两个以上的 id(1234、1235、1236、1240 等)是一个数组,这些数字是表 PRODUCTOS 在每个 id 中的行 refIdFactura 将被更改
  • 所以它运行 4 次,并将 ref_venda 添加到所有 4 个 id 中,并添加您在另一个表 LPRODUCTOS 中获得的相同数量的新行。看看有一个触发器在工作。产品更新后

标签: mysql pdo insert-update


【解决方案1】:

看起来两个表之间有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');

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

了解更多foreign key constraints

【讨论】:

  • 给我看这个:Array ( [Table] =&gt; LPRODUCTOS [Non_unique] =&gt; 0 [Key_name] =&gt; PRIMARY [Seq_in_index] =&gt; 1 [Column_name] =&gt; idP [Collation] =&gt; A [Cardinality] =&gt; 1631 [Sub_part] =&gt; [Packed] =&gt; [Null] =&gt; [Index_type] =&gt; BTREE [Comment] =&gt; [Index_comment] =&gt; ) ----------- Array ( [Table] =&gt; PRODUCTOS [Non_unique] =&gt; 0 [Key_name] =&gt; PRIMARY [Seq_in_index] =&gt; 1 [Column_name] =&gt; id_p [Collation] =&gt; A [Cardinality] =&gt; 22335 [Sub_part] =&gt; [Packed] =&gt; [Null] =&gt; [Index_type] =&gt; BTREE [Comment] =&gt; [Index_comment] =&gt; )
  • 看来foreign key 并没有采取行动。也许triggers...SHOW TRIGGERS 显示什么?
  • 我的建议已经完成,对不起:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
  • 2019-08-21
相关资源
最近更新 更多