有和没有"准备好的声明重复密钥更新"

时间:2014-08-17 21:54:47

标签: php mysqli

我正在尝试删除此ON DUPLICATE KEY UPDATE,因为我想要重复。此语句确实有效并插入数据但不重复。请帮忙。

$sql = "INSERT INTO projectselect (id_proj, project, role, id_agent)
VALUES ( ?,?,?, ( select idagency FROM agentsInfo WHERE email = ?))
ON DUPLICATE KEY UPDATE
`id_agent` = VALUES(`id_agent`),
`project` = VALUES(`project`),
`role` = VALUES(`role`)
";

if (($stmt = $con->prepare($sql)) === false) {
trigger_error($con->error, E_USER_ERROR);
}

$result2= mysqli_query($con, $idq);

$row_number = 1;

while ($row = mysqli_fetch_array($result2)) {

$id_proj= $row["id_proj"];
$project= $row["project"];
$role= $row["role"];
$id_proj++;

}


if ($stmt->bind_param("ssss",
$id_proj,
$postproj,
$postrole,
$_SESSION["email"]) === false) {
trigger_error($stmt->error, E_USER_ERROR);

}


if (($stmt->execute()) === false) {
trigger_error($stmt->error, E_USER_ERROR);
}

2 个答案:

答案 0 :(得分:1)

如果您想允许重复,请从表unique index中删除projectselect

答案 1 :(得分:1)

您必须了解ON DUPLICATE KEY仅在插入记录与现有记录冲突时触发,并且只有在您的表具有" unique"时才会发生此冲突。 fields - 该值只能在该表的所有记录中存在一次的字段。

您必须修复的第一件事是从表中删除UNIQUEPRIMARY键和索引。一旦完成,整个过程就应该有效了。

然后,一旦不再相关,您就可以从查询中删除ON DUPLICATE KEY...语句,以保持代码清洁。