【问题标题】:Cannot add or update a child row: a foreign key constraint fails Error无法添加或更新子行:外键约束失败错误
【发布时间】:2016-02-25 07:29:41
【问题描述】:

我的代码是:

private function get_parameters_to_array()
{
    $data = array(
        'datahora' => $this->input->post('datahora'),
        'valor' => $this->input->post('valor'),
        'idProduto' => $this->input->post('idProduto'),
        'idFuncionario' => $this->input->post('idFuncionario'),
        'idMesa' => $this->input->post('idMesa')
    );
    return $data;
}

我需要将 3 个 ID 值转换为 Int,该怎么做?我得到的错误是这个:

错误号:1452

无法添加或更新子行:外键约束失败 (tucunaredb.pedido, 约束fk_Pedido_Funcionario1 FOREIGN 键 (idFuncionario) 引用 funcionario (id) 删除否 更新操作无操作)

插入Pedido (datahora, valor, idProduto, idFuncionario, idMesa, ativo) 值 ('2016-02-24 23:14:16', '6.50', '8', '5', '2', 1)

【问题讨论】:

  • 如果 DB 列是 INT,那么它将是一个 INT。但是记录在案(int)$this->input->post('idMesa')
  • 您可以使用(int) $this->etc,但 sql 会为您执行此操作
  • @AbraCadaver 谢谢,这行得通!但我仍然收到错误,一定是别的东西......
  • 我看到你编辑了。那是完全不同的。
  • @AbraCadaver 对此有何想法?

标签: php mysql


【解决方案1】:

这很简单,这正是错误所说的:您尝试插入到具有funcionario.id 外键的列idFuncionario 中的值是错误的。您可能在父表funcionario 中没有id 5 的任何记录。

你必须先创建这样的记录,然后你才能从其他表中引用它。

foreign keys 的意义在于维护the referential integrity,换句话说,数据一致性

您在列Pedido.idFuncionario 上有外键fk_Pedido_Funcionario1,它引用了列funcionario.id。这意味着Pedido.idFuncionario 中的值不能与funcionario.id 中的值不同,并且数据库正在检查该值。当您尝试插入不同的值时,它会抛出您得到的错误。

唯一允许的其他值是NULL,但只有在一个案例列中才能包含这样的值(不是用NOT NULL定义的)。

【讨论】:

  • 我认为这是正在发生的事情,但我不知道为什么,相同的代码正在工作,但只是对于一些 funcionario cadastred,无论如何,正在工作,谢谢!
  • 抱歉,我不明白您所说的“相同的代码正在运行,但仅适用于某些功能地籍”是什么意思。如果“代码”是指您的INSERT,那么当然,正如我所解释的,它取决于值。您不能在Pedido.idFuncionario 列中插入任何不是在列funcionario.id 中的值。
猜你喜欢
  • 2018-09-09
  • 1970-01-01
  • 2014-05-10
  • 2022-12-10
  • 2020-10-04
相关资源
最近更新 更多