无法添加或更新子行:外键约束失败

时间:2015-06-16 12:53:38

标签: php mysql

  

SQLSTATE [23000]:完整性约束违规:1452

     

无法添加或更新子行:外键约束失败

     

whnkepbk_Hlandinterests,CONSTRAINT interests_ibfk_3外键(scale_id)参考scales_referencescale_id))

我知道问题是因为我必须将value设置为scale_id以添加此数据行。

我这样做:

    $requete = "INSERT INTO interests (onetsoc_code,element_id,scale_id,data_value) VALUES (:onetsoc_code,:element_id,:scale_id,:data_value)"; 
...           
$InsertMetier->bindParam(':scale_id', $scale);
            var_dump($scale);
            var_dump($InsertMetier);
            $InsertMetier->execute();

这里是var_dump的内容:

</pre>Ol<pre class='xdebug-var-dump' dir='ltr'><small>string</small> <font color='#cc0000'>'Ol'</font> 

'INSERT INTO interests (onetsoc_code,element_id,scale_id,data_value) VALUES (:onetsoc_code,:element_id,:scale_id,:data_value)'

我的scale变量根据var_dump确实有一个值,我的查询听起来合法。

这是我的数据库(感兴趣)的截图:

enter image description here

scales_reference

enter image description here

感兴趣的结构:

enter image description here

scale_reference的结构:

enter image description here

如果有人知道我做错了什么。

2 个答案:

答案 0 :(得分:1)

来自MySQL manual

MySQL错误Integrity constraint violation: 1452

  

对于支持外键的存储引擎,MySQL拒绝任何INSERT   或尝试在a中创建外键值的UPDATE操作   子表如果没有匹配的候选键值   父表。

这意味着你要么:

  1. 使用interest值插入scale_id表格,该值不存在于父表格中(scale_reference)。
  2. 您的查询出错并插入空scale_id - 从代码片段中不清楚您是如何用PHP变量中的实际值替换所有占位符(:xx)而我们不会这样做的。看到发送到MySQL服务器的实际查询。
  3. 您可以尝试在没有PHP的情况下直接在MySQL上运行所需的查询。如果它有效,那么你的PHP代码就会出现问题。

答案 1 :(得分:0)

Ol和OI之间有什么区别,你甚至无法在stackoverflow上看到它,“oi”和“ol”怎么样,是的,有一个很大的区别,我没有放“OI”,但我把OL放那就是问题。