2017-09-13 79 views
0

我的$ _POST数组是这样的:(特别是“child_address”)的MySQL/PHP更新许多到许多表

Array ( 
    [0] => Array ( 
     [child_address] => 123 Street 1 
    ) 
    [1] => Array ( 
     [child_address] => 123 Street 2 
    ) 
) 

当我遍历它们插入到MySQL的许多一对多表,我的数组中的最后一个值被输入到我的表中具有相同ID的所有字段中。

foreach ($child as $value) { 
    $query = "UPDATE M_children 
     SET child_address = ?, 
     WHERE personal_id = ?"; 
    $statement = $db->prepare($query); 
    $statement->bind_param('si', $value['child_address'], $_SESSION['mysqlID']); 
    $statement->execute(); 
} 

enter image description here

回答

2

这里有几件事情:

  1. 不需要定义里面查询for循环,它不会改变。
  2. 不需要在for循环内部准备语句,它也不会改变。
  3. bindParam绑定一个参数,当参数改变时,你需要做的就是调用再次执行,它将运行带有新参数值的查询。

  4. 而这是错误,你用该人员ID更新每一行。如果您只想更新一行,则需要对更新查询更具选择性。

1

当你说“SET child_address =?WHERE personal_id =?”时,和两个孩子的personal_id是相同的(在你的截图中为127),这将导致两个孩子被设置为相同的地址。

你想要么改变你的查询,要么改变你传递的最后一个参数。

+0

好抓!但'改变查询'到什么?或“最后一个参数”是什么?一点解释会非常有帮助! – kaza

+1

您希望您的WHERE子句缩小更新范围,以便仅更改单个子项的行。如果'personal_id'不是孩子的唯一标识符,那么这不是你想要使用的。它看起来像'id'是独一无二的,所以你应该使用它。 – MorbidGnome

+0

你可以把评论放入你的答案吗? – kaza