我有一个简单的PDO到MYSQL数据库的插入代码。
这是我的代码。
$catinsert="insert into shop_detail(shop_id,sub_category_id)values(:shop_id,:subcatid)";
$catresult=$pdocon->prepare($catinsert);
foreach($catexplode as $catval)
{
$subcat=$catval;
// $subcat=6;
$catresult->bindValue(':shop_id',$shopid,PDO::PARAM_INT);
$catresult->bindValue(':subcatid',$subcat,PDO::PARAM_INT);
$catresult->execute();
}
当我传递$ subcat的静态值(已注释掉)时,它可以正常工作。但是当相同的值通过数组传递并且有界时,它会返回外键完整性违规的异常。
为了这个问题的背景。我有一个外键,将shop_detail表的sub_category_id列与具有相同列名的 sub_category 表相关联。
重要的。 要绑定和插入的值确实存在于 sub_category 表中。
以下是详细错误。
exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`list`.`shop_detail`, CONSTRAINT `shop_to_subcat` FOREIGN KEY (`sub_category_id`) REFERENCES `sub_category` (`sub_category_id`))' in somewhat file.
答案 0 :(得分:0)
从技术上讲,你做错了。你应该在循环之外绑定ONCE:
$subcat = null;
$stmt->bindParam(':subcatid', $subcat);
foreach($catexplode as $subcat) {
$stmt->execute();
}
将变量绑定到占位符的重点是您只执行绑定ONCE。在PHP内部将设置相当于绑定变量的指针/引用,以便在您实际执行语句时拾取变量值的任何更改。